Skip to content

Commit

Permalink
kde-frameworks/kio: Fix knewfilemenu mkpath with >=Qt-5.9.3
Browse files Browse the repository at this point in the history
See also:
https://mail.kde.org/pipermail/kde-distro-packagers/2017-November/000298.html

Package-Manager: Portage-2.3.16, Repoman-2.3.6
  • Loading branch information
a17r committed Nov 29, 2017
1 parent a2002b3 commit 97d55e9
Show file tree
Hide file tree
Showing 2 changed files with 163 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
From 298c0e734efdd8a7b66a531959e3fb5357a6495d Mon Sep 17 00:00:00 2001
From: Eike Hein <[email protected]>
Date: Tue, 28 Nov 2017 19:42:46 +0900
Subject: Fix creating a directory via KNewFileMenu+KIO::mkpath on Qt 5.9.3+

Summary:
f62768d04652 in qtbase.git introduced a behavior change in QUrl
causing it to reject URLs with a path of "//foo" (note the double
slash) as invalid.

Both KNewFileMenu and KIO::mkpath contained code following this
pattern:

url.path() + '/' + name

This is a bad mix with forwarding slaves like kio_desktop, which
translate a top-level path of / to some other URL:

(desktop:)/ + / + foo = //foo

This patch addresses the two instances of this by wrapping the
string building in QDir::cleanPath, which I think is the shortest
and most readable way to go.

2353119aae8f in kio.git (D8836) was another commit fixing fallout
from this Qt change. Is unlikely this patch will be the last one.
I suspect many other variations of this problem lurk about the
codebase.

BUG:387073

Reviewers: dfaure, thiago, elvisangelaccio

Subscribers: #frameworks

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D9029
---
src/core/mkpathjob.cpp | 3 ++-
src/filewidgets/knewfilemenu.cpp | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/core/mkpathjob.cpp b/src/core/mkpathjob.cpp
index c77a9fe..f67a489 100644
--- a/src/core/mkpathjob.cpp
+++ b/src/core/mkpathjob.cpp
@@ -25,6 +25,7 @@
#include "mkdirjob.h"
#include <QTimer>
#include <QDebug>
+#include <QDir>
#include <QFileInfo>

using namespace KIO;
@@ -123,7 +124,7 @@ void MkpathJobPrivate::slotStart()
}

if (m_pathIterator != m_pathComponents.constEnd()) {
- m_url.setPath(m_url.path() + '/' + *m_pathIterator);
+ m_url.setPath(QDir::cleanPath(m_url.path() + '/' + *m_pathIterator));
KIO::Job* job = KIO::mkdir(m_url);
q->addSubjob(job);
q->setProcessedAmount(KJob::Directories, q->processedAmount(KJob::Directories) + 1);
diff --git a/src/filewidgets/knewfilemenu.cpp b/src/filewidgets/knewfilemenu.cpp
index 023eebd..98c9852 100644
--- a/src/filewidgets/knewfilemenu.cpp
+++ b/src/filewidgets/knewfilemenu.cpp
@@ -855,7 +855,7 @@ void KNewFileMenuPrivate::_k_slotCreateDirectory(bool writeHiddenDir)
}
}
url = baseUrl;
- url.setPath(url.path() + '/' + name);
+ url.setPath(QDir::cleanPath(url.path() + '/' + name));
}
}

--
cgit v0.11.2

83 changes: 83 additions & 0 deletions kde-frameworks/kio/kio-5.40.0-r2.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=6

KDE_TEST="forceoptional"
VIRTUALX_REQUIRED="test"
inherit kde5

DESCRIPTION="Framework providing transparent file and data management"
LICENSE="LGPL-2+"
KEYWORDS="~amd64 ~arm ~arm64 ~x86"
IUSE="acl +handbook kerberos +kwallet X"

RDEPEND="
$(add_frameworks_dep karchive)
$(add_frameworks_dep kbookmarks)
$(add_frameworks_dep kcodecs)
$(add_frameworks_dep kcompletion)
$(add_frameworks_dep kconfig)
$(add_frameworks_dep kconfigwidgets)
$(add_frameworks_dep kcoreaddons)
$(add_frameworks_dep kdbusaddons)
$(add_frameworks_dep ki18n)
$(add_frameworks_dep kiconthemes)
$(add_frameworks_dep kitemviews)
$(add_frameworks_dep kjobwidgets)
$(add_frameworks_dep knotifications)
$(add_frameworks_dep kservice)
$(add_frameworks_dep ktextwidgets)
$(add_frameworks_dep kwidgetsaddons)
$(add_frameworks_dep kwindowsystem)
$(add_frameworks_dep kxmlgui)
$(add_frameworks_dep solid)
$(add_qt_dep qtdbus)
$(add_qt_dep qtgui)
$(add_qt_dep qtnetwork 'ssl')
$(add_qt_dep qtscript)
$(add_qt_dep qtwidgets)
$(add_qt_dep qtxml)
dev-libs/libxml2
dev-libs/libxslt
acl? (
sys-apps/attr
virtual/acl
)
kerberos? ( virtual/krb5 )
kwallet? ( $(add_frameworks_dep kwallet) )
X? ( $(add_qt_dep qtx11extras) )
"
DEPEND="${RDEPEND}
$(add_qt_dep qtconcurrent)
handbook? ( $(add_frameworks_dep kdoctools) )
test? ( sys-libs/zlib )
X? (
x11-libs/libX11
x11-libs/libXrender
x11-proto/xproto
)
"
PDEPEND="
$(add_frameworks_dep kded)
"

PATCHES=(
"${FILESDIR}/${P}-mkpath-qt-5.9.3.patch"
"${FILESDIR}/${P}-knewfilemenu-mkpath-qt-5.9.3.patch"
)

# tests hang
RESTRICT+=" test"

src_configure() {
local mycmakeargs=(
$(cmake-utils_use_find_package acl ACL)
$(cmake-utils_use_find_package handbook KF5DocTools)
$(cmake-utils_use_find_package kerberos GSSAPI)
$(cmake-utils_use_find_package kwallet KF5Wallet)
$(cmake-utils_use_find_package X X11)
)

kde5_src_configure
}

0 comments on commit 97d55e9

Please sign in to comment.