git: d7bd94998c03 - 2021Q2 - graphics/spectacle: avoid crash with export-plugins
Adriaan de Groot
adridg at FreeBSD.org
Tue Apr 20 22:49:55 UTC 2021
The branch 2021Q2 has been updated by adridg:
URL: https://cgit.FreeBSD.org/ports/commit/?id=d7bd94998c03f8c14d58b4f462ea8d58a00f5ee6
commit d7bd94998c03f8c14d58b4f462ea8d58a00f5ee6
Author: Adriaan de Groot <adridg at FreeBSD.org>
AuthorDate: 2021-04-20 14:23:01 +0000
Commit: Adriaan de Groot <adridg at FreeBSD.org>
CommitDate: 2021-04-20 22:49:35 +0000
graphics/spectacle: avoid crash with export-plugins
This is upstream MR
https://invent.kde.org/graphics/spectacle/-/merge_requests/61
and avoids crashes when clicking almost any entry in the
*export* menu.
PR: 252313
---
graphics/spectacle/Makefile | 1 +
...t-f123cf6b1b67519a1a4e82e69764da9e89716489.diff | 52 ++++++++++++++++++++++
2 files changed, 53 insertions(+)
diff --git a/graphics/spectacle/Makefile b/graphics/spectacle/Makefile
index 5d091220bf64..d1fb10e3cfa4 100644
--- a/graphics/spectacle/Makefile
+++ b/graphics/spectacle/Makefile
@@ -1,6 +1,7 @@
PORTNAME= spectacle
DISTVERSION= ${KDE_APPLICATIONS_VERSION}
+PORTREVISION= 1
CATEGORIES= graphics kde kde-applications
MAINTAINER= kde at FreeBSD.org
diff --git a/graphics/spectacle/files/patch-git-f123cf6b1b67519a1a4e82e69764da9e89716489.diff b/graphics/spectacle/files/patch-git-f123cf6b1b67519a1a4e82e69764da9e89716489.diff
new file mode 100644
index 000000000000..379a3e90b1ed
--- /dev/null
+++ b/graphics/spectacle/files/patch-git-f123cf6b1b67519a1a4e82e69764da9e89716489.diff
@@ -0,0 +1,52 @@
+commit f123cf6b1b67519a1a4e82e69764da9e89716489
+Author: Adriaan de Groot <groot at kde.org>
+Date: Tue Apr 20 14:28:33 2021 +0200
+
+ Fix crash in all(?) KIPI export plugins
+
+ Scenario:
+ - start spectacle, take a screenshot, click *export* drop-down
+ and pick *imageshack* or *remote storage* (or most of the
+ others)
+ - spectacle crashes
+
+ Valgrind:
+ ==60783== Invalid read of size 8
+ ==60783== at 0x48A149A: KIPI::PluginLoader::interface() const (invent/libkipi/src/pluginloader.cpp:385)
+ ==60783== by 0x14DB111A: KIPIRemoteStoragePlugin::Plugin_RemoteStorage::slotActivateExport() (invent/kipi-plugins/remotestorage/plugin_remotestorage.cpp:122)
+ ==60783== Address 0xc6d28b0 is 16 bytes inside a block of size 24 free'd
+ ==60783== at 0x484CBAC: operator delete(void*) (in /usr/local/lib/valgrind/vgpreload_memcheck-amd64-freebsd.so)
+ ==60783== by 0x247CAB: ExportMenu::getKipiItems() (invent/spectacle/src/Gui/ExportMenu.cpp:164)
+diff --git src/Gui/ExportMenu.cpp src/Gui/ExportMenu.cpp
+index 66490dc..92eafa0 100644
+--- src/Gui/ExportMenu.cpp
++++ src/Gui/ExportMenu.cpp
+@@ -120,7 +120,19 @@ void ExportMenu::getKipiItems()
+ mKipiMenu->clear();
+
+ mKipiInterface = new KSGKipiInterface(this);
+- KIPI::PluginLoader *loader = new KIPI::PluginLoader;
++
++ KIPI::PluginLoader *loader = KIPI::PluginLoader::instance();
++ if (!loader)
++ {
++ // The loader needs to live at least as long as the plugins
++ // loaded through it, since the plugins use the loader's
++ // interface() call to get the KIPI interface they conform to.
++ //
++ // ASAN may complain about a leak here, because this loader
++ // pointer goes out of scope, but it is kept around in
++ // the PluginLoader's static instance()
++ loader = new KIPI::PluginLoader;
++ }
+
+ loader->setInterface(mKipiInterface);
+ loader->init();
+@@ -161,7 +173,6 @@ void ExportMenu::getKipiItems()
+ if (mKipiMenu->isEmpty()) {
+ mKipiMenu->addAction(i18n("No KIPI plugins available"))->setEnabled(false);
+ }
+- delete loader;
+ }
+ #endif
+
More information about the dev-commits-ports-all
mailing list