desktop/popup: fix use after free in Popup (#13335)

m_alpha was freed by fullyDestroy, but was then being touched because setCallbackOnEnd is activated by tick, which is the same function that updates animating variables

---------

Co-authored-by: Vaxry <vaxry@vaxry.net>
This commit is contained in:
jmanc3 2026-02-23 10:58:06 -06:00 committed by GitHub
parent f4bc8c3a64
commit bc09504ea5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -9,6 +9,7 @@
#include "../../managers/animation/AnimationManager.hpp"
#include "LayerSurface.hpp"
#include "../../managers/input/InputManager.hpp"
#include "../../managers/eventLoop/EventLoopManager.hpp"
#include "../../render/Renderer.hpp"
#include "../../render/OpenGL.hpp"
#include <ranges>
@ -108,8 +109,12 @@ void CPopup::initAllSignals() {
m_alpha->setCallbackOnEnd(
[this](auto) {
if (inert()) {
g_pHyprRenderer->damageBox(CBox{coordsGlobal(), size()});
fullyDestroy();
g_pEventLoopManager->doLater([p = m_self] {
if (!p)
return;
g_pHyprRenderer->damageBox(CBox{p->coordsGlobal(), p->size()});
p->fullyDestroy();
});
}
},
false);