Skip to content

Commit 16a3859

Browse files
committed
Remove (or Update) custom JpegImageConverter with vulnerable Magick.NET
1 parent d946099 commit 16a3859

File tree

2 files changed

+54
-12
lines changed

2 files changed

+54
-12
lines changed
Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,72 @@
1-
using ImageMagick;
1+
using SixLabors.ImageSharp;
2+
using SixLabors.ImageSharp.Formats.Jpeg;
3+
using SixLabors.ImageSharp.Formats.Png;
4+
using SixLabors.ImageSharp.PixelFormats;
5+
using SixLabors.ImageSharp.Processing;
6+
7+
using System;
8+
using System.IO;
29
using Telerik.Windows.Documents.Extensibility;
310
using Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.Export;
411

512
namespace CustomJpegImageConverter
613
{
14+
15+
// SixLabors.ImageSharp 3.1.12
16+
// SixLabors.ImageSharp.Drawing 2.1.7
17+
718
internal class CustomJpegImageConverter : JpegImageConverterBase
819
{
920
public override bool TryConvertToJpegImageData(byte[] imageData, ImageQuality imageQuality, out byte[] jpegImageData)
1021
{
11-
IMagickFormatInfo formatInfo = MagickFormatInfo.Create(imageData);
12-
if (formatInfo != null && formatInfo.SupportsReading)
22+
jpegImageData = null;
23+
24+
try
1325
{
14-
using (MagickImage magickImage = new MagickImage(imageData))
26+
using (var imageStream = new MemoryStream(imageData))
1527
{
16-
magickImage.Alpha(AlphaOption.Remove);
17-
magickImage.Quality = (uint)imageQuality;
28+
Image image = Image.Load(imageStream);
29+
var imageFormat = image.Metadata.DecodedImageFormat;
30+
31+
// Handle transparency for PNG
32+
if (imageFormat is PngFormat && image.PixelType.BitsPerPixel == 32)
33+
{
34+
var background = new Image<Rgba32>(image.Width, image.Height, Color.White);
35+
background.Mutate(ctx => ctx.DrawImage(image, 1f));
36+
37+
image.Dispose(); // Dispose original
38+
image = background; // Assign new image
39+
}
40+
41+
var jpegEncoder = new JpegEncoder
42+
{
43+
Quality = (int)imageQuality
44+
};
1845

19-
jpegImageData = magickImage.ToByteArray(MagickFormat.Jpeg);
46+
using (var ms = new MemoryStream())
47+
{
48+
image.Save(ms, jpegEncoder);
49+
jpegImageData = ms.ToArray();
50+
}
51+
52+
image.Dispose(); // Dispose final image
2053
}
2154

2255
return true;
2356
}
57+
catch (SixLabors.ImageSharp.UnknownImageFormatException)
58+
{
59+
return false;
60+
}
61+
catch (SixLabors.ImageSharp.ImageProcessingException)
62+
{
63+
return false;
64+
}
65+
catch (Exception)
66+
{
67+
return false;
68+
}
2469

25-
jpegImageData = null;
26-
return false;
2770
}
2871
}
2972
}

PdfProcessing/CustomJpegImageConverter/CustomJpegImageConverter_NetStandard.csproj

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,11 @@
2020
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2121
</Content>
2222
</ItemGroup>
23-
<ItemGroup>
24-
<PackageReference Include="Magick.NET-Q16-AnyCPU" Version="14.4.0" />
25-
</ItemGroup>
2623
<ItemGroup>
2724
</ItemGroup>
2825
<ItemGroup Label="Telerik NuGet Packages References">
26+
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.12" />
27+
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.7" />
2928
<PackageReference Include="Telerik.Documents.Core" Version="*" />
3029
<PackageReference Include="Telerik.Documents.Fixed" Version="*" />
3130
<PackageReference Include="Telerik.Zip" Version="*" />

0 commit comments

Comments
 (0)