]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Fix crash caused by null accountstate due to bad domain identifier parsed from FPExt
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 15 Oct 2024 03:30:54 +0000 (11:30 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 16 Oct 2024 07:49:59 +0000 (15:49 +0800)
Turns out since we are forced to replace colons with hyphens we need to
replace them back to colons when we receive the domain identifier from
the file provider extension. If we do not then we get a null
accountState pointer in the socket controller and this causes a crash

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/macOS/fileprovidersocketcontroller.cpp

index dad2032b5bd7800a2edd9bc7a8049667aed89032..44fca50f27f38adb8aa0a27f9ebdc3de42123dc0 100644 (file)
@@ -86,7 +86,19 @@ void FileProviderSocketController::parseReceivedLine(const QString &receivedLine
     const auto argument = receivedLine.mid(argPos + 1);
 
     if (command == QStringLiteral("FILE_PROVIDER_DOMAIN_IDENTIFIER_REQUEST_REPLY")) {
-        _accountState = FileProviderDomainManager::accountStateFromFileProviderDomainIdentifier(argument);
+        auto domainIdentifier = argument;
+        // Check if we have a port number who's colon has been replaced by a hyphen
+        // This is a workaround for the fact that we can't use colons as characters in domain names
+        // Let's check if, after the final hyphen, we have a number -- then it is a port number
+        const auto portColonPos = argument.lastIndexOf('-');
+        const auto possiblePort = argument.mid(portColonPos + 1);
+        auto validInt = false;
+        const auto port = possiblePort.toInt(&validInt);
+        if (validInt && port > 0) {
+            domainIdentifier.replace(portColonPos, 1, ':');
+        }
+
+        _accountState = FileProviderDomainManager::accountStateFromFileProviderDomainIdentifier(domainIdentifier);
         sendAccountDetails();
         reportSyncState("SYNC_PREPARING");
         return;