From e59464629fd1b0bdc4505786b8186d759933933c Mon Sep 17 00:00:00 2001 From: cyanbun96 <139242496+cyanbun96@users.noreply.github.com> Date: Mon, 24 Feb 2025 00:43:24 +0200 Subject: [PATCH] config: fix a possible crash in the monitor config parser (#9460) * Less crash-prone monitor config parser * clang-format --- src/config/ConfigManager.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 9b547ffb..caa82871 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -1946,11 +1946,16 @@ std::optional CConfigManager::handleMonitor(const std::string& comm error += "invalid resolution "; newrule.resolution = Vector2D(); } else { - newrule.resolution.x = stoi(ARGS[1].substr(0, ARGS[1].find_first_of('x'))); - newrule.resolution.y = stoi(ARGS[1].substr(ARGS[1].find_first_of('x') + 1, ARGS[1].find_first_of('@'))); + try { + newrule.resolution.x = stoi(ARGS[1].substr(0, ARGS[1].find_first_of('x'))); + newrule.resolution.y = stoi(ARGS[1].substr(ARGS[1].find_first_of('x') + 1, ARGS[1].find_first_of('@'))); - if (ARGS[1].contains("@")) - newrule.refreshRate = stof(ARGS[1].substr(ARGS[1].find_first_of('@') + 1)); + if (ARGS[1].contains("@")) + newrule.refreshRate = stof(ARGS[1].substr(ARGS[1].find_first_of('@') + 1)); + } catch (...) { + error += "invalid resolution "; + newrule.resolution = Vector2D(); + } } }