From d69959e226b1b49a1fc2d1a566acd4fdde0f97c3 Mon Sep 17 00:00:00 2001 From: Fabian Vogt Date: Thu, 7 Jan 2021 22:46:19 +0100 Subject: [PATCH] UDS_URL is not meant for links, Use UDS_TARGET_URL instead The KIO documentation for UDS_URL says: `use UDS_TARGET_URL if you want "links" to unrelated urls.` So the use of UDS_URL here was probably wrong. Switching to UDS_TARGET_URL fixes mounting of some slaves such as baloosearch, which set UDS_URL to the URL of the entry itself for some reason. BUG: 431079 --- kiofusevfs.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kiofusevfs.cpp b/kiofusevfs.cpp index fbf6e27..5c775b7 100644 --- a/kiofusevfs.cpp +++ b/kiofusevfs.cpp @@ -1736,12 +1736,12 @@ std::shared_ptr KIOFuseVFS::createNodeFromUDSEntry(const KIO::UDSEn attr.st_gid = gr->gr_gid; } - if(entry.contains(KIO::UDSEntry::UDS_LOCAL_PATH) || entry.contains(KIO::UDSEntry::UDS_URL)) + if(entry.contains(KIO::UDSEntry::UDS_LOCAL_PATH) || entry.contains(KIO::UDSEntry::UDS_TARGET_URL)) { // Create as symlink if possible QString target = entry.stringValue(KIO::UDSEntry::UDS_LOCAL_PATH); if(target.isEmpty()) - target = QUrl(entry.stringValue(KIO::UDSEntry::UDS_URL)).toLocalFile(); + target = QUrl(entry.stringValue(KIO::UDSEntry::UDS_TARGET_URL)).toLocalFile(); if(!target.isEmpty()) { @@ -1760,7 +1760,9 @@ std::shared_ptr KIOFuseVFS::createNodeFromUDSEntry(const KIO::UDSEn { attr.st_mode |= S_IFREG; std::shared_ptr ret = nullptr; - const QUrl nodeUrl = QUrl{entry.stringValue(KIO::UDSEntry::UDS_URL)}; + const QUrl nodeUrl = QUrl{entry.stringValue(KIO::UDSEntry::UDS_TARGET_URL)}; + if(nodeUrl.isEmpty()) + return nullptr; if(m_useFileJob && KProtocolManager::supportsOpening(nodeUrl) && KProtocolManager::supportsTruncating(nodeUrl)) ret = std::make_shared(parentIno, name, attr); else -- GitLab