diff options
| author | Tom Englund <tomenglund26@gmail.com> | 2025-03-26 18:22:44 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-26 18:22:44 +0100 |
| commit | 9ea76428b68fad5a68e9153bcb246547ac2e5d6c (patch) | |
| tree | 4ea37a2fc1bb38aad955fb4d6b4b6757a98cf526 /src/protocols/XDGShell.cpp | |
| parent | 0cd04bd666665bfdeafc0f55a93e532cd8978827 (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.cpp | 7 |
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); |
