From c152797c2b7be7a39c0dff70ab395905bbd855a0 Mon Sep 17 00:00:00 2001 From: zjeffer <4633209+zjeffer@users.noreply.github.com> Date: Sun, 18 Jun 2023 12:13:53 +0200 Subject: [PATCH] Fixes #1: catch exception if workspace not an integer --- src/main.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 023da5b..29af2c8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,8 +1,8 @@ -#include -#include #include #include +#include #include +#include #include "globals.hpp" @@ -22,16 +22,25 @@ static HOOK_CALLBACK_FN* e_monitorRemovedHandle = nullptr; const std::string& getWorkspaceFromMonitor(CMonitor* monitor, const std::string& workspace) { - int workspaceIndex = std::stoi(workspace); - if (workspaceIndex - 1 < 0) { + int workspaceIndex = 0; + try { + // convert to 0-indexed int + workspaceIndex = std::stoi(workspace) - 1; + } + catch (std::invalid_argument) { + Debug::log(WARN, "Invalid workspace index: %s", workspace.c_str()); return workspace; } - if (workspaceIndex - 1 >= g_vMonitorWorkspaceMap[monitor->ID].size()) { + if (workspaceIndex < 0) { return workspace; } - return g_vMonitorWorkspaceMap[monitor->ID][workspaceIndex - 1]; + if (workspaceIndex >= g_vMonitorWorkspaceMap[monitor->ID].size()) { + return workspace; + } + + return g_vMonitorWorkspaceMap[monitor->ID][workspaceIndex]; } void monitorWorkspace(std::string workspace)