diff options
| author | Claus Vium <cvium@users.noreply.github.com> | 2023-07-01 19:39:38 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-01 19:39:38 +0200 |
| commit | 80f1f5e00d4cb081d821de5f686dd41af5037d85 (patch) | |
| tree | 2ed7d2232f1fb16d4527c77b972288c78c98abd8 | |
| parent | bfb7c60f726a3f076e86e22dbdb994506259cb57 (diff) | |
| parent | 4dc87a6f93249b15d6660781c0026b77f1066c37 (diff) | |
Merge pull request #9219 from ProfessionalismIsMyMiddleName/master
Add a way to handle more invalid characters when sanitizing a filename
| -rw-r--r-- | Emby.Server.Implementations/IO/ManagedFileSystem.cs | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/Emby.Server.Implementations/IO/ManagedFileSystem.cs b/Emby.Server.Implementations/IO/ManagedFileSystem.cs index 1fffdfbfa..0ba4a488b 100644 --- a/Emby.Server.Implementations/IO/ManagedFileSystem.cs +++ b/Emby.Server.Implementations/IO/ManagedFileSystem.cs @@ -20,6 +20,14 @@ namespace Emby.Server.Implementations.IO private readonly List<IShortcutHandler> _shortcutHandlers = new List<IShortcutHandler>(); private readonly string _tempPath; private static readonly bool _isEnvironmentCaseInsensitive = OperatingSystem.IsWindows(); + private static readonly char[] _invalidPathCharacters = + { + '\"', '<', '>', '|', '\0', + (char)1, (char)2, (char)3, (char)4, (char)5, (char)6, (char)7, (char)8, (char)9, (char)10, + (char)11, (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, (char)18, (char)19, (char)20, + (char)21, (char)22, (char)23, (char)24, (char)25, (char)26, (char)27, (char)28, (char)29, (char)30, + (char)31, ':', '*', '?', '\\', '/' + }; /// <summary> /// Initializes a new instance of the <see cref="ManagedFileSystem"/> class. @@ -275,8 +283,7 @@ namespace Emby.Server.Implementations.IO /// <exception cref="ArgumentNullException">The filename is null.</exception> public string GetValidFilename(string filename) { - var invalid = Path.GetInvalidFileNameChars(); - var first = filename.IndexOfAny(invalid); + var first = filename.IndexOfAny(_invalidPathCharacters); if (first == -1) { // Fast path for clean strings @@ -285,7 +292,7 @@ namespace Emby.Server.Implementations.IO return string.Create( filename.Length, - (filename, invalid, first), + (filename, _invalidPathCharacters, first), (chars, state) => { state.filename.AsSpan().CopyTo(chars); @@ -293,7 +300,7 @@ namespace Emby.Server.Implementations.IO chars[state.first++] = ' '; var len = chars.Length; - foreach (var c in state.invalid) + foreach (var c in state._invalidPathCharacters) { for (int i = state.first; i < len; i++) { |
