Windows: Forbid chars 0-31 in filenames #6987
authorChristian Kamm <mail@ckamm.de>
Fri, 1 Mar 2019 08:33:55 +0000 (09:33 +0100)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 15 Dec 2020 09:58:42 +0000 (10:58 +0100)
src/csync/csync_exclude.cpp
test/testexcludedfiles.cpp

index 8233a6b1ffd5092316ce48cbfe014984a2e7e187..902dffc7651bee457892ee6c955f9718c9d606d0 100644 (file)
@@ -187,7 +187,11 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(const QString &path, bool exclu
 
     // Filter out characters not allowed in a filename on windows
     for (auto p : path) {
-        switch (p.unicode()) {
+        const ushort c = p.unicode();
+        if (c < 32) {
+            return CSYNC_FILE_EXCLUDE_INVALID_CHAR;
+        }
+        switch (c) {
         case '\\':
         case ':':
         case '?':
index cb6b3c1a2653e61a34bafc703bd39c55e05e3b03..f00683e88860a151405bf29887886c6158e4493c 100644 (file)
@@ -193,10 +193,10 @@ private slots:
 
     #ifdef _WIN32
         QCOMPARE(check_file_full("file_trailing_space "), CSYNC_FILE_EXCLUDE_TRAILING_SPACE);
-
         QCOMPARE(check_file_full("file_trailing_dot."), CSYNC_FILE_EXCLUDE_INVALID_CHAR);
         QCOMPARE(check_file_full("AUX"), CSYNC_FILE_EXCLUDE_INVALID_CHAR);
         QCOMPARE(check_file_full("file_invalid_char<"), CSYNC_FILE_EXCLUDE_INVALID_CHAR);
+        QCOMPARE(check_file_full("file_invalid_char\n"), CSYNC_FILE_EXCLUDE_INVALID_CHAR);
     #endif
 
         /* ? character */