From a1f6721fc8874d0c15b723db9908d090cd422585 Mon Sep 17 00:00:00 2001 From: Alex Trotsenko Date: Thu, 9 Sep 2021 17:14:07 +0300 Subject: Allow destruction of QWinEventNotifier in its signal Avoid use-after-free issue in QProcess. Fixes: QTBUG-96285 Fixes: QTBUG-96359 Change-Id: I953d7a8ecaf301ec3a27db37e13748f905c3d097 Reviewed-by: Christoph Cullmann Reviewed-by: Thiago Macieira Reviewed-by: Oswald Buddenhagen (cherry picked from commit 4e0082a9cacfdfd0c43e6105274bc0d41dd18801) Reviewed-by: Volker Hilsheimer --- src/corelib/kernel/qwineventnotifier.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/corelib/kernel/qwineventnotifier.cpp') diff --git a/src/corelib/kernel/qwineventnotifier.cpp b/src/corelib/kernel/qwineventnotifier.cpp index 3371e101b6..073b8f61ab 100644 --- a/src/corelib/kernel/qwineventnotifier.cpp +++ b/src/corelib/kernel/qwineventnotifier.cpp @@ -41,6 +41,7 @@ #include "qcoreapplication.h" #include "qthread.h" +#include QT_BEGIN_NAMESPACE @@ -238,9 +239,10 @@ bool QWinEventNotifier::event(QEvent * e) // when the callback is queued. d->registered = false; + QPointer alive(this); emit activated(d->handleToEvent, QPrivateSignal()); - if (d->enabled && !d->registered) { + if (alive && d->enabled && !d->registered) { SetThreadpoolWait(d->waitObject, d->handleToEvent, NULL); d->registered = true; } -- cgit v1.2.3