|
@@ -74,7 +74,7 @@ namespace Jellyfin.Api.Controllers
|
|
|
: type;
|
|
|
|
|
|
var path = BaseItem.SupportedImageExtensions
|
|
|
- .Select(i => Path.Combine(_applicationPaths.GeneralPath, name, filename + i))
|
|
|
+ .Select(i => Path.GetFullPath(Path.Combine(_applicationPaths.GeneralPath, name, filename + i)))
|
|
|
.FirstOrDefault(System.IO.File.Exists);
|
|
|
|
|
|
if (path == null)
|
|
@@ -82,6 +82,11 @@ namespace Jellyfin.Api.Controllers
|
|
|
return NotFound();
|
|
|
}
|
|
|
|
|
|
+ if (!path.StartsWith(_applicationPaths.GeneralPath))
|
|
|
+ {
|
|
|
+ return BadRequest("Invalid image path.");
|
|
|
+ }
|
|
|
+
|
|
|
var contentType = MimeTypes.GetMimeType(path);
|
|
|
return File(System.IO.File.OpenRead(path), contentType);
|
|
|
}
|
|
@@ -163,7 +168,8 @@ namespace Jellyfin.Api.Controllers
|
|
|
/// <returns>A <see cref="FileStreamResult"/> containing the image contents on success, or a <see cref="NotFoundResult"/> if the image could not be found.</returns>
|
|
|
private ActionResult GetImageFile(string basePath, string theme, string? name)
|
|
|
{
|
|
|
- var themeFolder = Path.Combine(basePath, theme);
|
|
|
+ var themeFolder = Path.GetFullPath(Path.Combine(basePath, theme));
|
|
|
+
|
|
|
if (Directory.Exists(themeFolder))
|
|
|
{
|
|
|
var path = BaseItem.SupportedImageExtensions.Select(i => Path.Combine(themeFolder, name + i))
|
|
@@ -171,12 +177,18 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
|
if (!string.IsNullOrEmpty(path) && System.IO.File.Exists(path))
|
|
|
{
|
|
|
+ if (!path.StartsWith(basePath))
|
|
|
+ {
|
|
|
+ return BadRequest("Invalid image path.");
|
|
|
+ }
|
|
|
+
|
|
|
var contentType = MimeTypes.GetMimeType(path);
|
|
|
+
|
|
|
return PhysicalFile(path, contentType);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var allFolder = Path.Combine(basePath, "all");
|
|
|
+ var allFolder = Path.GetFullPath(Path.Combine(basePath, "all"));
|
|
|
if (Directory.Exists(allFolder))
|
|
|
{
|
|
|
var path = BaseItem.SupportedImageExtensions.Select(i => Path.Combine(allFolder, name + i))
|
|
@@ -184,6 +196,11 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
|
if (!string.IsNullOrEmpty(path) && System.IO.File.Exists(path))
|
|
|
{
|
|
|
+ if (!path.StartsWith(basePath))
|
|
|
+ {
|
|
|
+ return BadRequest("Invalid image path.");
|
|
|
+ }
|
|
|
+
|
|
|
var contentType = MimeTypes.GetMimeType(path);
|
|
|
return PhysicalFile(path, contentType);
|
|
|
}
|