hyprctl: avoid parsing string::npos on invalid cmd (#7544)

* 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 <vaxry@vaxry.net>
This commit is contained in:
Tom Englund 2024-08-27 20:42:30 +02:00 committed by GitHub
parent 6a8824253c
commit 17ed4fc04c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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);
// 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";
const auto COMMAND = in.substr(0, in.find_first_of(' '));
// Strip the keyword
in = in.substr(firstSpacePos + 1);
const auto VALUE = in.substr(in.find_first_of(' ') + 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);