diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2019-12-17 22:08:23 +0100 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2019-12-18 00:48:40 +0100 |
commit | f81cfcf382ece23c884dc0d33283d835e84c0d2b (patch) | |
tree | c91ca1878c72a07c70fd589ccabb59fe749695e8 /kde-apps/print-manager | |
parent | sci-libs/cln: arm64 stable (bug #693784) (diff) | |
download | gentoo-f81cfcf382ece23c884dc0d33283d835e84c0d2b.tar.gz gentoo-f81cfcf382ece23c884dc0d33283d835e84c0d2b.tar.bz2 gentoo-f81cfcf382ece23c884dc0d33283d835e84c0d2b.zip |
kde-apps/print-manager: Fix crash when cups returns jobs w/ duplicate id
Package-Manager: Portage-2.3.82, Repoman-2.3.20
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
Diffstat (limited to 'kde-apps/print-manager')
-rw-r--r-- | kde-apps/print-manager/files/print-manager-19.08.3-crash-w-cups-jobs-w-duplicate-id.patch | 87 | ||||
-rw-r--r-- | kde-apps/print-manager/print-manager-19.08.3-r1.ebuild | 60 |
2 files changed, 147 insertions, 0 deletions
diff --git a/kde-apps/print-manager/files/print-manager-19.08.3-crash-w-cups-jobs-w-duplicate-id.patch b/kde-apps/print-manager/files/print-manager-19.08.3-crash-w-cups-jobs-w-duplicate-id.patch new file mode 100644 index 000000000000..be4b2efd4935 --- /dev/null +++ b/kde-apps/print-manager/files/print-manager-19.08.3-crash-w-cups-jobs-w-duplicate-id.patch @@ -0,0 +1,87 @@ +From c93f2f16c30d10fbd0f4bfb4c0bf0cec07a4c93b Mon Sep 17 00:00:00 2001 +From: Albert Astals Cid <aacid@kde.org> +Date: Mon, 2 Dec 2019 23:04:42 +0100 +Subject: Fix crash when cups returns jobs with duplicate id + +Summary: +For some reason my cups was giving me two withheld jobs with id 33 and two with id 40 + +That made the JobModel code crash, because it went like this + + * First job with id 33 found + * insertRow with 0 called + * Row 0 inserted + * Job at row 0 updated (from inside insertRow) + * Second job with id 33 found + * The "oh i already have this job code triggers", updates the job, then takesRow 0 and inserts at row 1. QStandardItemModel doesn't like getting a row add at 1 inserted when empty + * First job with id 40 found + * insertRow with 2 called + * Row 2 inserted, it fails, QStandardItemModel doesn't like getting a row add at 2 when empty + * Job at row 2 updated (from iniside insertRow) + * Crash because there's no row 2 in the model + +BUGS: 326289 + +Test Plan: Doesn't crash anymore with my weird cups list of pending jobs + +Reviewers: dantti + +Reviewed By: dantti + +Subscribers: ngraham, marcelm, fvogt, broulik, nicolasfella, kmaterka, kde-utils-devel + +Differential Revision: https://phabricator.kde.org/D25623 +--- + libkcups/JobModel.cpp | 23 +++++++++++++++++++++-- + 1 file changed, 21 insertions(+), 2 deletions(-) + +diff --git a/libkcups/JobModel.cpp b/libkcups/JobModel.cpp +index 73c5174..3c4878b 100644 +--- a/libkcups/JobModel.cpp ++++ b/libkcups/JobModel.cpp +@@ -174,6 +174,25 @@ void JobModel::getJobs() + m_processingJob.clear(); + } + ++static KCupsJobs sanitizeJobs(KCupsJobs jobs) ++{ ++ // For some reason sometimes cups has broken job queues with jobs with duplicated id ++ // our model doesn't like that at all so sanitize the job list before processing it ++ QVector<int> seenIds; ++ int i = 0; ++ while (i < jobs.count()) { ++ const int jobId = jobs.at(i).id(); ++ if (seenIds.contains(jobId)) { ++ qCWarning(LIBKCUPS) << "Found job with duplicated id" << jobId; ++ jobs.removeAt(i); ++ } else { ++ seenIds << jobId; ++ ++i; ++ } ++ } ++ return jobs; ++} ++ + void JobModel::getJobFinished(KCupsRequest *request) + { + if (request) { +@@ -181,7 +200,7 @@ void JobModel::getJobFinished(KCupsRequest *request) + // clear the model after so that the proper widget can be shown + clear(); + } else { +- const KCupsJobs jobs = request->jobs(); ++ const KCupsJobs jobs = sanitizeJobs(request->jobs()); + qCDebug(LIBKCUPS) << jobs.size(); + for (int i = 0; i < jobs.size(); ++i) { + const KCupsJob job = jobs.at(i); +@@ -207,7 +226,7 @@ void JobModel::getJobFinished(KCupsRequest *request) + } + } + +- // remove old printers ++ // remove old jobs + // The above code starts from 0 and make sure + // dest == modelIndex(x) and if it's not the + // case it either inserts or moves it. +-- +cgit v1.1 diff --git a/kde-apps/print-manager/print-manager-19.08.3-r1.ebuild b/kde-apps/print-manager/print-manager-19.08.3-r1.ebuild new file mode 100644 index 000000000000..a0f498d40171 --- /dev/null +++ b/kde-apps/print-manager/print-manager-19.08.3-r1.ebuild @@ -0,0 +1,60 @@ +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +KFMIN=5.60.0 +PLASMA_MINIMAL=5.16.5 +QTMIN=5.12.3 +inherit ecm kde.org + +DESCRIPTION="Manage print jobs and printers in Plasma" +LICENSE="GPL-2" # TODO: CHECK +SLOT="5" +KEYWORDS="~amd64 ~arm64 ~x86" +IUSE="+gtk" + +DEPEND=" + >=kde-frameworks/kcmutils-${KFMIN}:5 + >=kde-frameworks/kconfig-${KFMIN}:5 + >=kde-frameworks/kconfigwidgets-${KFMIN}:5 + >=kde-frameworks/kcoreaddons-${KFMIN}:5 + >=kde-frameworks/kdbusaddons-${KFMIN}:5 + >=kde-frameworks/ki18n-${KFMIN}:5 + >=kde-frameworks/kiconthemes-${KFMIN}:5 + >=kde-frameworks/kio-${KFMIN}:5 + >=kde-frameworks/knotifications-${KFMIN}:5 + >=kde-frameworks/kservice-${KFMIN}:5 + >=kde-frameworks/kwidgetsaddons-${KFMIN}:5 + >=kde-frameworks/kwindowsystem-${KFMIN}:5 + >=kde-frameworks/plasma-${KFMIN}:5 + >=dev-qt/qtdbus-${QTMIN}:5 + >=dev-qt/qtdeclarative-${QTMIN}:5 + >=dev-qt/qtgui-${QTMIN}:5 + >=dev-qt/qtnetwork-${QTMIN}:5 + >=dev-qt/qtwidgets-${QTMIN}:5 + net-print/cups +" +RDEPEND="${DEPEND} + >=kde-plasma/kde-cli-tools-${PLASMA_MINIMAL}:5 + gtk? ( app-admin/system-config-printer ) +" + +PATCHES=( "${FILESDIR}"/${P}-crash-w-cups-jobs-w-duplicate-id.patch ) + +pkg_postinst(){ + ecm_pkg_postinst + + if [[ -z "${REPLACING_VERSIONS}" ]] && ! use gtk ; then + ewarn "By switching off \"gtk\" USE flag, you have chosen to do without" + ewarn "an important, though optional, runtime dependency:" + ewarn + ewarn "app-admin/system-config-printer" + ewarn + ewarn "${PN} will work nevertheless, but is going to be less comfortable" + ewarn "and will show the following error status during runtime:" + ewarn + ewarn "\"Failed to group devices: 'The name org.fedoraproject.Config.Printing" + ewarn "was not provided by any .service files'\"" + fi +} |