mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-05-19 08:30:22 -07:00
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
This commit is contained in:
parent
0cd04bd666
commit
9ea76428b6
@ -319,8 +319,11 @@ uint32_t CXDGToplevelResource::setSuspeneded(bool sus) {
|
||||
void CXDGToplevelResource::applyState() {
|
||||
wl_array arr;
|
||||
wl_array_init(&arr);
|
||||
|
||||
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);
|
||||
|
||||
|
@ -3021,7 +3021,7 @@ CEGLSync::~CEGLSync() {
|
||||
if (sync == EGL_NO_SYNC_KHR)
|
||||
return;
|
||||
|
||||
if (g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, sync) != EGL_TRUE)
|
||||
if (g_pHyprOpenGL && g_pHyprOpenGL->m_sProc.eglDestroySyncKHR(g_pHyprOpenGL->m_pEglDisplay, sync) != EGL_TRUE)
|
||||
Debug::log(ERR, "eglDestroySyncKHR failed");
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user