Store forbidden filename match bools outside of if statement
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 20 Aug 2024 14:01:05 +0000 (22:01 +0800)
committerMatthieu Gallien <matthieu_gallien@yahoo.fr>
Wed, 21 Aug 2024 07:51:39 +0000 (09:51 +0200)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/libsync/discovery.cpp

index 0434ff9427fe8f48f68fc2faad47f87fbb839f41..a2c00fb29cc9a210ea8cc00a9d39aad89fb7c308 100644 (file)
@@ -301,14 +301,28 @@ bool ProcessDirectoryJob::handleExcluded(const QString &path, const Entries &ent
     const auto forbiddenExtensions = accountCaps.forbiddenFilenameExtensions();
     const auto forbiddenChars = accountCaps.forbiddenFilenameCharacters();
 
+    const auto hasForbiddenFilename = forbiddenFilenames.contains(localName);
+    const auto hasForbiddenBasename = forbiddenBasenames.contains(baseName);
+    const auto hasForbiddenExtension = forbiddenExtensions.contains(extension);
+
+    auto forbiddenCharMatch = QString{};
+    const auto containsForbiddenCharacters =
+        std::any_of(forbiddenChars.cbegin(),
+                    forbiddenChars.cend(),
+                    [&localName, &forbiddenCharMatch](const QString &charPattern) {
+                        if (localName.contains(charPattern)) {
+                            forbiddenCharMatch = charPattern;
+                            return true;
+                        }
+                        return false;
+                    });
+
     if (excluded == CSYNC_NOT_EXCLUDED && !localName.isEmpty()
         && (_discoveryData->_serverBlacklistedFiles.contains(localName)
-            || forbiddenFilenames.contains(localName)
-            || forbiddenBasenames.contains(baseName)
-            || forbiddenExtensions.contains(extension)
-            || std::any_of(forbiddenChars.cbegin(), forbiddenChars.cend(), [&localName](const QString &charPattern) {
-                   return localName.contains(charPattern);
-               }))) {
+            || hasForbiddenFilename
+            || hasForbiddenBasename
+            || hasForbiddenExtension
+            || containsForbiddenCharacters)) {
         excluded = CSYNC_FILE_EXCLUDE_SERVER_BLACKLISTED;
         isInvalidPattern = true;
     }