summaryrefslogtreecommitdiff
path: root/kde-misc/kio-fuse/files/kio-fuse-5.0.0-fix-segfault-on-links-2.patch
blob: a16da6d75357791cab9926e4d8e1a9ae5bf6f80c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
From d69959e226b1b49a1fc2d1a566acd4fdde0f97c3 Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de>
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<KIOFuseNode> 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<KIOFuseNode> KIOFuseVFS::createNodeFromUDSEntry(const KIO::UDSEn
 		{
 			attr.st_mode |= S_IFREG;
 			std::shared_ptr<KIOFuseRemoteFileNode> 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<KIOFuseRemoteFileJobBasedFileNode>(parentIno, name, attr);
 			else
-- 
GitLab