فهرست منبع

PathExtensions: Fix index out of bounds in TryReplaceSubPath

Fixes #5977
Bond_009 4 سال پیش
والد
کامیت
47e7c1356c

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

@@ -96,8 +96,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
             // 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
             // when the sub path matches a similar but in-complete subpath
             var oldSubPathEndsWithSeparator = subPath[^1] == newDirectorySeparatorChar;
             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;
                 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/", "/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("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)
         public void TryReplaceSubPath_ValidArgs_Correct(string path, string subPath, string newSubPath, string? expectedResult)
         {
         {
             Assert.True(PathExtensions.TryReplaceSubPath(path, subPath, newSubPath, out var result));
             Assert.True(PathExtensions.TryReplaceSubPath(path, subPath, newSubPath, out var result));