From owner-svn-ports-all@freebsd.org Sun May 24 20:22:13 2020 Return-Path: Delivered-To: svn-ports-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E9B2B2CFF9C; Sun, 24 May 2020 20:22:13 +0000 (UTC) (envelope-from tcberner@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49VWq960H7z4ZmD; Sun, 24 May 2020 20:22:13 +0000 (UTC) (envelope-from tcberner@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C91D126C88; Sun, 24 May 2020 20:22:13 +0000 (UTC) (envelope-from tcberner@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 04OKMDdM038751; Sun, 24 May 2020 20:22:13 GMT (envelope-from tcberner@FreeBSD.org) Received: (from tcberner@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 04OKMDbD038749; Sun, 24 May 2020 20:22:13 GMT (envelope-from tcberner@FreeBSD.org) Message-Id: <202005242022.04OKMDbD038749@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tcberner set sender to tcberner@FreeBSD.org using -f From: "Tobias C. Berner" Date: Sun, 24 May 2020 20:22:13 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r536419 - in head/devel/kf5-kio: . files X-SVN-Group: ports-head X-SVN-Commit-Author: tcberner X-SVN-Commit-Paths: in head/devel/kf5-kio: . files X-SVN-Commit-Revision: 536419 X-SVN-Commit-Repository: ports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 May 2020 20:22:14 -0000 Author: tcberner Date: Sun May 24 20:22:13 2020 New Revision: 536419 URL: https://svnweb.freebsd.org/changeset/ports/536419 Log: devel/kf5-kio: add upstream bug fix: "Could not find the program ‘konsole’" From upstrams [1] bug report 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. [1] https://bugs.kde.org/show_bug.cgi?id=421374 PR: 246659 Reported by: Serge Volkov Added: head/devel/kf5-kio/files/ head/devel/kf5-kio/files/patch-git_6452a34cf (contents, props changed) Modified: head/devel/kf5-kio/Makefile Modified: head/devel/kf5-kio/Makefile ============================================================================== --- head/devel/kf5-kio/Makefile Sun May 24 18:55:34 2020 (r536418) +++ head/devel/kf5-kio/Makefile Sun May 24 20:22:13 2020 (r536419) @@ -2,6 +2,7 @@ PORTNAME= kio DISTVERSION= ${KDE_FRAMEWORKS_VERSION} +PORTREVISION= 1 KDE_FRAMEWORKS_VERSION= 5.70.1 CATEGORIES= devel kde kde-frameworks Added: head/devel/kf5-kio/files/patch-git_6452a34cf ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/devel/kf5-kio/files/patch-git_6452a34cf Sun May 24 20:22:13 2020 (r536419) @@ -0,0 +1,90 @@ +From 6452a34cf01d03d3167b38bc28a2fe8e13569021 Mon Sep 17 00:00:00 2001 +From: Jonathan Marten +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 & + 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 & + 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 +