diff options
author | Tobias C. Berner <tcberner@FreeBSD.org> | 2020-05-24 20:22:13 +0000 |
---|---|---|
committer | Tobias C. Berner <tcberner@FreeBSD.org> | 2020-05-24 20:22:13 +0000 |
commit | da9ed866a567714667dc0937a7af316ee4913129 (patch) | |
tree | 2fd05253d90a67f4362acee71853689e9c5e7809 /devel | |
parent | 1ac21e9294818af15eec85678cff32635477e330 (diff) | |
download | ports-da9ed866a567714667dc0937a7af316ee4913129.tar.gz ports-da9ed866a567714667dc0937a7af316ee4913129.zip |
Notes
Diffstat (limited to 'devel')
-rw-r--r-- | devel/kf5-kio/Makefile | 1 | ||||
-rw-r--r-- | devel/kf5-kio/files/patch-git_6452a34cf | 90 |
2 files changed, 91 insertions, 0 deletions
diff --git a/devel/kf5-kio/Makefile b/devel/kf5-kio/Makefile index 82b6b5beeaf1..c8f6f23bc478 100644 --- a/devel/kf5-kio/Makefile +++ b/devel/kf5-kio/Makefile @@ -2,6 +2,7 @@ PORTNAME= kio DISTVERSION= ${KDE_FRAMEWORKS_VERSION} +PORTREVISION= 1 KDE_FRAMEWORKS_VERSION= 5.70.1 CATEGORIES= devel kde kde-frameworks diff --git a/devel/kf5-kio/files/patch-git_6452a34cf b/devel/kf5-kio/files/patch-git_6452a34cf new file mode 100644 index 000000000000..20648e469102 --- /dev/null +++ b/devel/kf5-kio/files/patch-git_6452a34cf @@ -0,0 +1,90 @@ +From 6452a34cf01d03d3167b38bc28a2fe8e13569021 Mon Sep 17 00:00:00 2001 +From: Jonathan Marten <jjm@keelhaul.me.uk> +Date: Thu, 14 May 2020 19:17:54 +0100 +Subject: Fix service file specifying 'Run in terminal' giving an error code + 100 + +Happens because KIO::DesktopExecParser::resultingArguments() prepends +the terminal application to the command line. If this is a relative path, +as it is most likely to be (and will be in the default 'konsole' case), +the "realExecutable" check in KProcessRunner::KProcessRunner() is triggered +and the job aborts with an error. + +Expand the specified terminal executable into a full path in resultingArguments(), +and return an error immediately if it cannot be found. This full terminal path +is not relative for the KProcessRunner::KProcessRunner() check and does not fail. + +Check that resultingArguments() is not empty (an error return) before accessing +the first word of the command, so that it does not assert if the list is empty. +Also only call resultingArguments() once. + +BUG: 421374 +FIXED-IN: 5.71 + +Differential Revision: https://phabricator.kde.org/D29738 +--- + src/core/desktopexecparser.cpp | 10 +++++++++- + src/gui/kprocessrunner.cpp | 17 +++++++++-------- + 2 files changed, 18 insertions(+), 9 deletions(-) + +diff --git a/src/core/desktopexecparser.cpp b/src/core/desktopexecparser.cpp +index a3b5219..fcf83d9 100644 +--- src/core/desktopexecparser.cpp.orig ++++ src/core/desktopexecparser.cpp +@@ -421,7 +421,15 @@ QStringList KIO::DesktopExecParser::resultingArguments() const + if (d->service.terminal()) { + KConfigGroup cg(KSharedConfig::openConfig(), "General"); + QString terminal = cg.readPathEntry("TerminalApplication", QStringLiteral("konsole")); +- if (terminal == QLatin1String("konsole")) { ++ const bool isKonsole = (terminal == QLatin1String("konsole")); ++ ++ QString terminalPath = QStandardPaths::findExecutable(terminal); ++ if (terminalPath.isEmpty()) { ++ qCWarning(KIO_CORE) << "Terminal" << terminal << "not found, service" << d->service.name(); ++ return QStringList(); ++ } ++ terminal = terminalPath; ++ if (isKonsole) { + if (!d->service.workingDirectory().isEmpty()) { + terminal += QLatin1String(" --workdir ") + KShell::quoteArg(d->service.workingDirectory()); + } +diff --git a/src/gui/kprocessrunner.cpp b/src/gui/kprocessrunner.cpp +index a4701a7..cc57b54 100644 +--- src/gui/kprocessrunner.cpp.orig ++++ src/gui/kprocessrunner.cpp +@@ -88,9 +88,17 @@ KProcessRunner::KProcessRunner(const KService::Ptr &service, const QList<QUrl> & + emitDelayedError(i18n("The desktop entry file\n%1\nis not valid.", service->entryPath())); + return; + } ++ + KIO::DesktopExecParser execParser(*service, urls); ++ execParser.setUrlsAreTempFiles(flags & KIO::ApplicationLauncherJob::DeleteTemporaryFiles); ++ execParser.setSuggestedFileName(suggestedFileName); ++ const QStringList args = execParser.resultingArguments(); ++ if (args.isEmpty()) { ++ emitDelayedError(i18n("Error processing Exec field in %1", service->entryPath())); ++ return; ++ } + +- const QString realExecutable = execParser.resultingArguments().at(0); ++ const QString realExecutable = args.at(0); + // realExecutable is a full path if DesktopExecParser was able to locate it. Otherwise it's still relative, which is a bad sign. + if (QDir::isRelativePath(realExecutable) || !QFileInfo(realExecutable).isExecutable()) { + // Does it really not exist, or is it non-executable? (bug #415567) +@@ -103,13 +111,6 @@ KProcessRunner::KProcessRunner(const KService::Ptr &service, const QList<QUrl> & + return; + } + +- execParser.setUrlsAreTempFiles(flags & KIO::ApplicationLauncherJob::DeleteTemporaryFiles); +- execParser.setSuggestedFileName(suggestedFileName); +- const QStringList args = execParser.resultingArguments(); +- if (args.isEmpty()) { +- emitDelayedError(i18n("Error processing Exec field in %1", service->entryPath())); +- return; +- } + //qDebug() << "KProcess args=" << args; + *m_process << args; + +-- +cgit v1.1 + |