diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2021-04-04 14:23:39 +0200 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2021-04-04 15:19:40 +0200 |
commit | 8b66280500df8b8a4da00c3da550eb8dc989bd33 (patch) | |
tree | 19c3a4ef21407ddb5fe4ee18699b53114a08d1d8 /kde-frameworks/kio | |
parent | kde-frameworks/kio: Fix create files on ftp shares (diff) | |
download | gentoo-8b66280500df8b8a4da00c3da550eb8dc989bd33.tar.gz gentoo-8b66280500df8b8a4da00c3da550eb8dc989bd33.tar.bz2 gentoo-8b66280500df8b8a4da00c3da550eb8dc989bd33.zip |
kde-frameworks/kio: Fix crash in ThumbnailProtocol
Upstream commit a68cb73c4e071ed24b18a95e11fbbbc8d59840b4
KDE-bug: https://bugs.kde.org/show_bug.cgi?id=430862
Package-Manager: Portage-3.0.18, Repoman-3.0.3
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
Diffstat (limited to 'kde-frameworks/kio')
-rw-r--r-- | kde-frameworks/kio/files/kio-5.80.1-fix-crash-in-ThumbnailProtocol.patch | 104 | ||||
-rw-r--r-- | kde-frameworks/kio/kio-5.80.1-r2.ebuild | 1 |
2 files changed, 105 insertions, 0 deletions
diff --git a/kde-frameworks/kio/files/kio-5.80.1-fix-crash-in-ThumbnailProtocol.patch b/kde-frameworks/kio/files/kio-5.80.1-fix-crash-in-ThumbnailProtocol.patch new file mode 100644 index 000000000000..059c9f824241 --- /dev/null +++ b/kde-frameworks/kio/files/kio-5.80.1-fix-crash-in-ThumbnailProtocol.patch @@ -0,0 +1,104 @@ +From a68cb73c4e071ed24b18a95e11fbbbc8d59840b4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=A9ven=20Car?= <meven29@gmail.com> +Date: Sun, 21 Mar 2021 05:22:57 +0100 +Subject: [PATCH] PreviewJob: Initialize cachesSize with 0, only pass size > 0 + to shmget, improve createThumbnail + +BUG: 430862 +--- + src/widgets/previewjob.cpp | 48 +++++++++++++++++++++++--------------- + 1 file changed, 29 insertions(+), 19 deletions(-) + +diff --git a/src/widgets/previewjob.cpp b/src/widgets/previewjob.cpp +index 988da16b0..9b6e661e8 100644 +--- a/src/widgets/previewjob.cpp ++++ b/src/widgets/previewjob.cpp +@@ -70,7 +70,7 @@ public: + : initialItems(items) + , width(size.width()) + , height(size.height()) +- , cacheSize(-1) ++ , cacheSize(0) + , bScale(true) + , bSave(true) + , ignoreMaximumSize(false) +@@ -114,8 +114,8 @@ public: + // Size of thumbnail + int width; + int height; +- // Unscaled size of thumbnail (128 or 256 if cache is enabled) +- int cacheSize; ++ // Unscaled size of thumbnail (128, 256 or 512 if cache is enabled) ++ ushort cacheSize; + // Whether the thumbnail should be scaled + bool bScale; + // Whether we should save the thumbnail +@@ -712,39 +712,49 @@ void PreviewJobPrivate::createThumbnail(const QString &pixPath) + }); + + bool save = bSave && currentItem.plugin->property(QStringLiteral("CacheThumbnail")).toBool() && !sequenceIndex; ++ int thumb_width = width; ++ int thumb_height = height; ++ int thumb_iconSize = iconSize; ++ if (save) { ++ thumb_width = thumb_height = cacheSize; ++ thumb_iconSize = 64; ++ } ++ + job->addMetaData(QStringLiteral("mimeType"), currentItem.item.mimetype()); +- job->addMetaData(QStringLiteral("width"), QString().setNum(save ? cacheSize : width)); +- job->addMetaData(QStringLiteral("height"), QString().setNum(save ? cacheSize : height)); +- job->addMetaData(QStringLiteral("iconSize"), QString().setNum(save ? 64 : iconSize)); +- job->addMetaData(QStringLiteral("iconAlpha"), QString().setNum(iconAlpha)); ++ job->addMetaData(QStringLiteral("width"), QString::number(thumb_width)); ++ job->addMetaData(QStringLiteral("height"), QString::number(thumb_height)); ++ job->addMetaData(QStringLiteral("iconSize"), QString::number(thumb_iconSize)); ++ job->addMetaData(QStringLiteral("iconAlpha"), QString::number(iconAlpha)); + job->addMetaData(QStringLiteral("plugin"), currentItem.plugin->library()); + job->addMetaData(QStringLiteral("enabledPlugins"), enabledPlugins.join(QLatin1Char(','))); + job->addMetaData(QStringLiteral("devicePixelRatio"), QString::number(devicePixelRatio)); + if (sequenceIndex) { +- job->addMetaData(QStringLiteral("sequence-index"), QString().setNum(sequenceIndex)); ++ job->addMetaData(QStringLiteral("sequence-index"), QString::number(sequenceIndex)); + } + + #if WITH_SHM + if (shmid == -1) { + if (shmaddr) { ++ // clean previous shared memory segment + shmdt((char *)shmaddr); + shmctl(shmid, IPC_RMID, nullptr); ++ shmaddr = nullptr; + } +- auto size = std::max(cacheSize * cacheSize, width * height); +- shmid = shmget(IPC_PRIVATE, size * 4 * devicePixelRatio * devicePixelRatio, IPC_CREAT | 0600); +- if (shmid != -1) { +- shmaddr = (uchar *)(shmat(shmid, nullptr, SHM_RDONLY)); +- if (shmaddr == (uchar *)-1) { +- shmctl(shmid, IPC_RMID, nullptr); +- shmaddr = nullptr; +- shmid = -1; ++ auto size = thumb_width * thumb_height; ++ if (size > 0) { ++ shmid = shmget(IPC_PRIVATE, size * 4 * devicePixelRatio * devicePixelRatio, IPC_CREAT | 0600); ++ if (shmid != -1) { ++ shmaddr = (uchar *)(shmat(shmid, nullptr, SHM_RDONLY)); ++ if (shmaddr == (uchar *)-1) { ++ shmctl(shmid, IPC_RMID, nullptr); ++ shmaddr = nullptr; ++ shmid = -1; ++ } + } +- } else { +- shmaddr = nullptr; + } + } + if (shmid != -1) { +- job->addMetaData(QStringLiteral("shmid"), QString().setNum(shmid)); ++ job->addMetaData(QStringLiteral("shmid"), QString::number(shmid)); + } + #endif + } +-- +GitLab + diff --git a/kde-frameworks/kio/kio-5.80.1-r2.ebuild b/kde-frameworks/kio/kio-5.80.1-r2.ebuild index 59bdb0d13ea7..ee0dc3c8892b 100644 --- a/kde-frameworks/kio/kio-5.80.1-r2.ebuild +++ b/kde-frameworks/kio/kio-5.80.1-r2.ebuild @@ -75,6 +75,7 @@ PATCHES=( "${FILESDIR}"/${P}-MimeTypeFinderJob-file.so.patch # KDE-Bug 434455 "${FILESDIR}"/${P}-gcc11-include-order.patch # bug 766480 "${FILESDIR}"/${P}-fix-create-files-on-ftp.patch # KDE-Bug 429541 + "${FILESDIR}"/${P}-fix-crash-in-ThumbnailProtocol.patch # KDE-Bug 430862 ) src_configure() { |