summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Trotsenko <alex1973tr@gmail.com>2021-09-09 17:14:07 +0300
committerAlex Trotsenko <alex1973tr@gmail.com>2021-09-11 19:41:07 +0300
commitc5a79d6dbc563719cfc71a2169cfa01156e10307 (patch)
tree0d54b85eccdfd5dde2768160462ad8da6ac8e300
parent866ceb7eb45eecbe2804820a2a6d271e52f2f34e (diff)
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 <cullmann@kde.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> (cherry picked from commit 4e0082a9cacfdfd0c43e6105274bc0d41dd18801)
-rw-r--r--src/corelib/kernel/qwineventnotifier.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/corelib/kernel/qwineventnotifier.cpp b/src/corelib/kernel/qwineventnotifier.cpp
index f9e91e73d7..486e07b649 100644
--- a/src/corelib/kernel/qwineventnotifier.cpp
+++ b/src/corelib/kernel/qwineventnotifier.cpp
@@ -41,6 +41,7 @@
#include "qcoreapplication.h"
#include "qthread.h"
+#include <QPointer>
QT_BEGIN_NAMESPACE
@@ -228,9 +229,10 @@ bool QWinEventNotifier::event(QEvent * e)
== QWinEventNotifierPrivate::Posted && d->enabled) {
d->unregisterWaitObject();
+ QPointer<QWinEventNotifier> alive(this);
emit activated(d->handleToEvent, QPrivateSignal());
- if (d->enabled && d->waitHandle == NULL)
+ if (alive && d->enabled && d->waitHandle == NULL)
d->registerWaitObject();
}
return true;