From 5a0a8fb0d186d4e161126edbd7e09eaf746dd85f Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sat, 27 Nov 2021 19:44:58 +0100 Subject: [PATCH] Fixed WM crashes on wonky windows opening --- src/ipc/ipc.cpp | 1 - src/utilities/XCBProps.cpp | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ipc/ipc.cpp b/src/ipc/ipc.cpp index c6a57e5..915eef3 100644 --- a/src/ipc/ipc.cpp +++ b/src/ipc/ipc.cpp @@ -135,7 +135,6 @@ void IPCRecieveMessageB(const std::string path) { std::sort(g_pWindowManager->statusBar->openWorkspaces.begin(), g_pWindowManager->statusBar->openWorkspaces.end()); } else if (PROPNAME == "lastwindowname") { g_pWindowManager->statusBar->setLastWindowName(PROPVALUE); - Debug::log(LOG, "update window name to " + PROPVALUE); } } } catch(...) { diff --git a/src/utilities/XCBProps.cpp b/src/utilities/XCBProps.cpp index 30cb990..bd2f344 100644 --- a/src/utilities/XCBProps.cpp +++ b/src/utilities/XCBProps.cpp @@ -7,6 +7,10 @@ std::pair getClassName(int64_t window) { PROP(class_cookie, XCB_ATOM_WM_CLASS, 128); + if (!class_cookiereply) { + return std::make_pair<>("Error", "Error"); + } + const size_t PROPLEN = xcb_get_property_value_length(class_cookiereply); char* NEWCLASS = (char*)xcb_get_property_value(class_cookiereply); const size_t CLASSNAMEINDEX = strnlen(NEWCLASS, PROPLEN) + 1; @@ -27,6 +31,9 @@ std::pair getClassName(int64_t window) { std::string getRoleName(int64_t window) { PROP(role_cookie, HYPRATOMS["WM_WINDOW_ROLE"], 128); + if (!role_cookiereply) + return "Error"; + std::string returns = ""; if (role_cookiereply == NULL || xcb_get_property_value_length(role_cookiereply)) { @@ -48,6 +55,9 @@ std::string getRoleName(int64_t window) { std::string getWindowName(uint64_t window) { PROP(name_cookie, HYPRATOMS["_NET_WM_NAME"], 128); + if (!name_cookiereply) + return "Error"; + const int len = xcb_get_property_value_length(name_cookiereply); char* name = strndup((const char*)xcb_get_property_value(name_cookiereply), len); std::string stringname(name);