diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index 3a2b4138e..dbc2b8732 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -249,10 +249,16 @@ void CXWM::readProp(SP XSURF, uint32_t atom, xcb_get_property_ }; auto handleWMHints = [&]() { - if (reply->value_len == 0) + if (reply->type == XCB_ATOM_NONE || reply->value_len == 0) { + XSURF->m_hints.reset(); return; - XSURF->m_hints = makeUnique(); - xcb_icccm_get_wm_hints_from_reply(XSURF->m_hints.get(), reply); + } + + auto hints = makeUnique(); + if (!xcb_icccm_get_wm_hints_from_reply(hints.get(), reply)) + return; + + XSURF->m_hints = std::move(hints); if (!(XSURF->m_hints->flags & XCB_ICCCM_WM_HINT_INPUT)) XSURF->m_hints->input = true; }; @@ -282,12 +288,20 @@ void CXWM::readProp(SP XSURF, uint32_t atom, xcb_get_property_ }; auto handleSizeHints = [&]() { - if (reply->type != HYPRATOMS["WM_SIZE_HINTS"] || reply->value_len == 0) + if (reply->type == XCB_ATOM_NONE || reply->value_len == 0) { + XSURF->m_sizeHints.reset(); + return; + } + + if (reply->type != HYPRATOMS["WM_SIZE_HINTS"]) return; - XSURF->m_sizeHints = makeUnique(); - std::memset(XSURF->m_sizeHints.get(), 0, sizeof(xcb_size_hints_t)); - xcb_icccm_get_wm_size_hints_from_reply(XSURF->m_sizeHints.get(), reply); + auto sizeHints = makeUnique(); + std::memset(sizeHints.get(), 0, sizeof(xcb_size_hints_t)); + if (!xcb_icccm_get_wm_size_hints_from_reply(sizeHints.get(), reply)) + return; + + XSURF->m_sizeHints = std::move(sizeHints); const int32_t FLAGS = XSURF->m_sizeHints->flags; const bool HASMIN = FLAGS & XCB_ICCCM_SIZE_HINT_P_MIN_SIZE;