Jelajahi Sumber

Bug 2177: Session.EnumerateRemoteFiles does not work correctly when the mask includes brackets and other symbols

https://winscp.net/tracker/2177

Source commit: bbe68f549a4537cd75389b8b4b712b1907b3bd0f
Martin Prikryl 2 tahun lalu
induk
melakukan
c73e425833
1 mengubah file dengan 16 tambahan dan 9 penghapusan
  1. 16 9
      dotnet/Session.cs

+ 16 - 9
dotnet/Session.cs

@@ -680,15 +680,22 @@ namespace WinSCP
                 mask = "*";
             }
 
-            return
-                new Regex(
-                    '^' +
-                    mask
-                        .Replace(".", "[.]")
-                        .Replace("*", ".*")
-                        .Replace("?", ".") +
-                    '$',
-                    RegexOptions.IgnoreCase);
+            string r = "^";
+            foreach (var c in mask)
+            {
+                string p;
+                switch (c)
+                {
+                    case '.': p = "[.]"; break;
+                    case '*': p = ".*"; break;
+                    case '?': p = "."; break;
+                    default: p = Regex.Escape(new string(c, 1)); break;
+                }
+                r += p;
+            }
+            r += "$";
+
+            return new Regex(r, RegexOptions.IgnoreCase);
         }
 
         public TransferOperationResult PutFiles(string localPath, string remotePath, bool remove = false, TransferOptions options = null)