summaryrefslogtreecommitdiff
path: root/src/protocols/XDGShell.cpp
diff options
context:
space:
mode:
authorTom Englund <tomenglund26@gmail.com>2025-03-26 18:22:44 +0100
committerGitHub <noreply@github.com>2025-03-26 18:22:44 +0100
commit9ea76428b68fad5a68e9153bcb246547ac2e5d6c (patch)
tree4ea37a2fc1bb38aad955fb4d6b4b6757a98cf526 /src/protocols/XDGShell.cpp
parent0cd04bd666665bfdeafc0f55a93e532cd8978827 (diff)
internal: fix minor ubsan errors (#9743)
* opengl: check if g_pHyprOpengl exist on compositor destruction we can hit a race where a CEGLSync destructs and tries to call eglDestroySyncKHR on a null g_pHyprOpengl. /src/render/OpenGL.cpp:3019:32: runtime error: member access within null pointer of type 'struct CHyprOpenGLImpl' #0 0x555565eed979 in CEGLSync::~CEGLSync() /src/render/OpenGL.cpp:3019 #1 0x555565f6271e in std::default_delete<CEGLSync>::operator()(CEGLSync*) const /usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/bits/unique_ptr.h:93 * xdgshell: dont apply state on empty states setsize can be called before a state has been added to pending, resulting in calling ApplyState with a empty state. /src/protocols/XDGShell.cpp:323:11: runtime error: null pointer passed as argument 2, which is declared to never be null #0 0x5555659bf67e in CXDGToplevelResource::applyState() /src/protocols/XDGShell.cpp:323 #1 0x5555659bcedc in CXDGToplevelResource::setSize(Hyprutils::Math::Vector2D const&) /src/protocols/XDGShell.cpp: 256 #2 0x555563eed0ef in Events::listener_commitWindow(void*, void*) /src/events/Windows.cpp:841
Diffstat (limited to 'src/protocols/XDGShell.cpp')
-rw-r--r--src/protocols/XDGShell.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/protocols/XDGShell.cpp b/src/protocols/XDGShell.cpp
index db274e3c..4170d4dd 100644
--- a/src/protocols/XDGShell.cpp
+++ b/src/protocols/XDGShell.cpp
@@ -319,8 +319,11 @@ uint32_t CXDGToplevelResource::setSuspeneded(bool sus) {
void CXDGToplevelResource::applyState() {
wl_array arr;
wl_array_init(&arr);
- wl_array_add(&arr, pendingApply.states.size() * sizeof(int));
- memcpy(arr.data, pendingApply.states.data(), pendingApply.states.size() * sizeof(int));
+
+ if (!pendingApply.states.empty()) {
+ wl_array_add(&arr, pendingApply.states.size() * sizeof(int));
+ memcpy(arr.data, pendingApply.states.data(), pendingApply.states.size() * sizeof(int));
+ }
resource->sendConfigure(pendingApply.size.x, pendingApply.size.y, &arr);