summaryrefslogtreecommitdiff
path: root/media-sound/audacious/files/audacious-3.10-use-after-free.patch
diff options
context:
space:
mode:
Diffstat (limited to 'media-sound/audacious/files/audacious-3.10-use-after-free.patch')
-rw-r--r--media-sound/audacious/files/audacious-3.10-use-after-free.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/media-sound/audacious/files/audacious-3.10-use-after-free.patch b/media-sound/audacious/files/audacious-3.10-use-after-free.patch
new file mode 100644
index 000000000000..8271a3d6d1b0
--- /dev/null
+++ b/media-sound/audacious/files/audacious-3.10-use-after-free.patch
@@ -0,0 +1,38 @@
+From 1d34f6799b8f5910fc6863ae96afd5ab035e830f Mon Sep 17 00:00:00 2001
+From: John Lindgren <john@jlindgren.net>
+Date: Thu, 20 Sep 2018 13:46:52 -0400
+Subject: [PATCH] audqt: Use deleteLater() to prevent use-after-free in Qt
+ event handling. Closes: #828.
+
+---
+ src/libaudqt/infopopup-qt.cc | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/src/libaudqt/infopopup-qt.cc b/src/libaudqt/infopopup-qt.cc
+index fdbba41d2..81dd87f5c 100644
+--- a/src/libaudqt/infopopup-qt.cc
++++ b/src/libaudqt/infopopup-qt.cc
+@@ -176,7 +176,9 @@ static InfoPopup * s_infopopup;
+
+ static void infopopup_show (const String & filename, const Tuple & tuple)
+ {
+- delete s_infopopup;
++ if (s_infopopup)
++ s_infopopup->deleteLater ();
++
+ s_infopopup = new InfoPopup (filename, tuple);
+
+ QObject::connect (s_infopopup, & QObject::destroyed, [] () {
+@@ -206,7 +208,11 @@ EXPORT void infopopup_show_current ()
+
+ EXPORT void infopopup_hide ()
+ {
+- delete s_infopopup;
++ /* This function can be called from an enter/leave event, and Qt does not
++ * like widgets being deleted from such events. This is debatably a bug in
++ * Qt, but deleteLater() is an effective workaround. */
++ if (s_infopopup)
++ s_infopopup->deleteLater ();
+ }
+
+ } // namespace audqt