Browse Source

#7626 Added handling for common FormatExceptions with Skia loading sv… (#9581)

Co-authored-by: Shadowghost <Shadowghost@users.noreply.github.com>
JPVenson 2 years ago
parent
commit
3c22d5c970

+ 1 - 1
Emby.Server.Implementations/Library/LibraryManager.cs

@@ -1885,7 +1885,7 @@ namespace Emby.Server.Implementations.Library
                 catch (Exception ex)
                 {
                     _logger.LogError(ex, "Cannot get image dimensions for {ImagePath}", image.Path);
-                    size = new ImageDimensions(0, 0);
+                    size = default;
                     image.Width = 0;
                     image.Height = 0;
                 }

+ 14 - 4
src/Jellyfin.Drawing.Skia/SkiaEncoder.cs

@@ -120,8 +120,18 @@ public class SkiaEncoder : IImageEncoder
         if (extension.Equals(".svg", StringComparison.OrdinalIgnoreCase))
         {
             var svg = new SKSvg();
-            svg.Load(path);
-            return new ImageDimensions(Convert.ToInt32(svg.Picture.CullRect.Width), Convert.ToInt32(svg.Picture.CullRect.Height));
+            try
+            {
+                svg.Load(path);
+                return new ImageDimensions(Convert.ToInt32(svg.Picture.CullRect.Width), Convert.ToInt32(svg.Picture.CullRect.Height));
+            }
+            catch (FormatException skiaColorException)
+            {
+                // This exception is known to be thrown on vector images that define custom styles
+                // Skia SVG is not able to handle that and as the repository is quite stale and has not received updates we just catch them
+                _logger.LogDebug(skiaColorException, "There was a issue loading the requested svg file");
+                return default;
+            }
         }
 
         using var codec = SKCodec.Create(path, out SKCodecResult result);
@@ -132,10 +142,10 @@ public class SkiaEncoder : IImageEncoder
                 return new ImageDimensions(info.Width, info.Height);
             case SKCodecResult.Unimplemented:
                 _logger.LogDebug("Image format not supported: {FilePath}", path);
-                return new ImageDimensions(0, 0);
+                return default;
             default:
                 _logger.LogError("Unable to determine image dimensions for {FilePath}: {SkCodecResult}", path, result);
-                return new ImageDimensions(0, 0);
+                return default;
         }
     }