Skip to content

Commit

Permalink
hyprctl: avoid parsing string::npos on invalid cmd (#7544)
Browse files Browse the repository at this point in the history
* hyprctl: avoid parsing string::npos on invalid cmd

invalid lines passed to hyprctl keyword made the string parsing try to
parse std::string::npos, avoid that and return an error text instead.

* style

---------

Co-authored-by: Vaxry <[email protected]>
  • Loading branch information
gulafaran and vaxerski authored Aug 27, 2024
1 parent 6a88242 commit 17ed4fc
Showing 1 changed file with 20 additions and 6 deletions.
26 changes: 20 additions & 6 deletions src/debug/HyprCtl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -970,12 +970,26 @@ std::string dispatchRequest(eHyprCtlOutputFormat format, std::string in) {
}

std::string dispatchKeyword(eHyprCtlOutputFormat format, std::string in) {
// get rid of the keyword keyword
in = in.substr(in.find_first_of(' ') + 1);

const auto COMMAND = in.substr(0, in.find_first_of(' '));

const auto VALUE = in.substr(in.find_first_of(' ') + 1);
// Find the first space to strip the keyword keyword
auto const firstSpacePos = in.find_first_of(' ');
if (firstSpacePos == std::string::npos) // Handle the case where there's no space found (invalid input)
return "Invalid input: no space found";

// Strip the keyword
in = in.substr(firstSpacePos + 1);

// Find the next space for the COMMAND and VALUE
auto const secondSpacePos = in.find_first_of(' ');
if (secondSpacePos == std::string::npos) // Handle the case where there's no second space (invalid input)
return "Invalid input: command and value not properly formatted";

// Extract COMMAND and VALUE
const auto COMMAND = in.substr(0, secondSpacePos);
const auto VALUE = in.substr(secondSpacePos + 1);

// If either COMMAND or VALUE is empty, handle accordingly
if (COMMAND.empty() || VALUE.empty())
return "Invalid input: command or value is empty";

std::string retval = g_pConfigManager->parseKeyword(COMMAND, VALUE);

Expand Down

0 comments on commit 17ed4fc

Please sign in to comment.