瀏覽代碼

Merge pull request #5987 from Bond-009/ioob

PathExtensions: Fix index out of bounds in TryReplaceSubPath
(cherry picked from commit a6ee4632ce618e60909aa4310e33d60dcdfc1aec)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
Bond-009 4 年之前
父節點
當前提交
6386606a53

+ 8 - 2
Emby.Server.Implementations/Library/PathExtensions.cs

@@ -90,8 +90,14 @@ namespace Emby.Server.Implementations.Library
             // We have to ensure that the sub path ends with a directory separator otherwise we'll get weird results
             // when the sub path matches a similar but in-complete subpath
             var oldSubPathEndsWithSeparator = subPath[^1] == newDirectorySeparatorChar;
-            if (!path.StartsWith(subPath, StringComparison.OrdinalIgnoreCase)
-                || (!oldSubPathEndsWithSeparator && path[subPath.Length] != newDirectorySeparatorChar))
+            if (!path.StartsWith(subPath, StringComparison.OrdinalIgnoreCase))
+            {
+                return false;
+            }
+
+            if (path.Length > subPath.Length
+                && !oldSubPathEndsWithSeparator
+                && path[subPath.Length] != newDirectorySeparatorChar)
             {
                 return false;
             }

+ 1 - 0
tests/Jellyfin.Server.Implementations.Tests/Library/PathExtensionsTests.cs

@@ -33,6 +33,7 @@ namespace Jellyfin.Server.Implementations.Tests.Library
         [InlineData("C:\\Users\\jeff\\myfile.mkv", "C:\\Users/jeff", "/home/jeff/", "/home/jeff/myfile.mkv")]
         [InlineData("C:\\Users\\jeff\\myfile.mkv", "C:\\Users/jeff/", "/home/jeff/", "/home/jeff/myfile.mkv")]
         [InlineData("C:\\Users\\jeff\\myfile.mkv", "C:\\Users/jeff/", "/", "/myfile.mkv")]
+        [InlineData("/o", "/o", "/s", "/s")] // regression test for #5977
         public void TryReplaceSubPath_ValidArgs_Correct(string path, string subPath, string newSubPath, string? expectedResult)
         {
             Assert.True(PathExtensions.TryReplaceSubPath(path, subPath, newSubPath, out var result));