Allow non-ASCII in downloaded filenames (#8825)

Fixes https://github.com/jellyfin/jellyfin/issues/8657
This commit is contained in:
Justin 2022-12-03 10:47:59 -05:00 committed by GitHub
parent fe3e7979b0
commit df66816178
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -637,22 +637,10 @@ namespace Jellyfin.Api.Controllers
await LogDownloadAsync(item, user).ConfigureAwait(false);
}
var path = item.Path;
// Quotes are valid in linux. They'll possibly cause issues here.
var filename = Path.GetFileName(item.Path)?.Replace("\"", string.Empty, StringComparison.Ordinal);
// Quotes are valid in linux. They'll possibly cause issues here
var filename = (Path.GetFileName(path) ?? string.Empty).Replace("\"", string.Empty, StringComparison.Ordinal);
if (!string.IsNullOrWhiteSpace(filename))
{
// Kestrel doesn't support non-ASCII characters in headers
if (Regex.IsMatch(filename, @"[^\p{IsBasicLatin}]"))
{
// Manually encoding non-ASCII characters, following https://tools.ietf.org/html/rfc5987#section-3.2.2
filename = WebUtility.UrlEncode(filename);
}
}
// TODO determine non-ASCII validity.
return PhysicalFile(path, MimeTypes.GetMimeType(path), filename, true);
return PhysicalFile(item.Path, MimeTypes.GetMimeType(item.Path), filename, true);
}
/// <summary>