Fix absolute path checking on windows

The fragile path matching no longer works with dotnet 8, causing Windows users to lose collection items because the item path is incorrectly validated, then the server will remove all items due to file not found.

Signed-off-by: gnattu <gnattuoc@me.com>
pull/11570/head
gnattu 3 weeks ago
parent 7d271547c6
commit b17cbb0af4

@ -80,12 +80,14 @@ namespace Emby.Server.Implementations.IO
public virtual string MakeAbsolutePath(string folderPath, string filePath)
{
// path is actually a stream
if (string.IsNullOrWhiteSpace(filePath) || filePath.Contains("://", StringComparison.Ordinal))
if (string.IsNullOrWhiteSpace(filePath))
{
return filePath;
}
if (filePath.Length > 3 && filePath[1] == ':' && filePath[2] == '/')
var isAbsolutePath = Path.IsPathRooted(filePath) && (!OperatingSystem.IsWindows() || filePath[0] != '\\');
if (isAbsolutePath)
{
// absolute local path
return filePath;
@ -97,17 +99,10 @@ namespace Emby.Server.Implementations.IO
return filePath;
}
var firstChar = filePath[0];
if (firstChar == '/')
{
// for this we don't really know
return filePath;
}
var filePathSpan = filePath.AsSpan();
// relative path
if (firstChar == '\\')
// relative path on windows
if (filePath[0] == '\\')
{
filePathSpan = filePathSpan.Slice(1);
}

Loading…
Cancel
Save