diff options
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.patch | 38 |
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 |