GraphicsMagick: JPEG FormatJPEGSamplingFactors(): Properly handl...
GraphicsMagick Commits <[email protected]> Sat, 01 Jun 2024 08:50:57 -0500
| Newsgroups | gmane.comp.video.graphicsmagick.cvs |
|---|---|
| Message-ID | <mailman.8114.1717249873.7906.graphicsmagick-commit@lists.sourceforge.net> |
changeset 5488b5300b26 in /hg/GraphicsMagick details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=5488b5300b26 summary: JPEG FormatJPEGSamplingFactors(): Properly handle the number of samples for each colorspace. diffstat: ChangeLog | 7 + VisualMagick/installer/inc/version.isx | 4 +- coders/jpeg.c | 171 +++++++++++++++++++++++--------- magick/version.h | 4 +- www/ChangeLog.html | 9 + 5 files changed, 143 insertions(+), 52 deletions(-) diffs (254 lines): diff -r 5e5f228181f4 -r 5488b5300b26 ChangeLog --- a/ChangeLog Sun May 26 11:20:06 2024 -0500 +++ b/ChangeLog Sat Jun 01 08:49:41 2024 -0500 @@ -1,3 +1,10 @@ +2024-06-01 Bob Friesenhahn <[email protected]> + + * coders/jpeg.c (FormatJPEGSamplingFactors): Properly handle the + number of samples for each colorspace. Addresses oss-fuzz 68737: + "graphicsmagick:coder_DCM_fuzzer: Use-of-uninitialized-value in + ReadJPEGImage". + 2024-05-26 Fojtik Jaroslav <[email protected]> * coders/tga.c: Set affinity of UndefinedOrientation to diff -r 5e5f228181f4 -r 5488b5300b26 VisualMagick/installer/inc/version.isx --- a/VisualMagick/installer/inc/version.isx Sun May 26 11:20:06 2024 -0500 +++ b/VisualMagick/installer/inc/version.isx Sat Jun 01 08:49:41 2024 -0500 @@ -10,5 +10,5 @@ #define public MagickPackageName "GraphicsMagick" #define public MagickPackageVersion "1.4" -#define public MagickPackageVersionAddendum ".020240526" -#define public MagickPackageReleaseDate "snapshot-20240526" +#define public MagickPackageVersionAddendum ".020240601" +#define public MagickPackageReleaseDate "snapshot-20240601" diff -r 5e5f228181f4 -r 5488b5300b26 coders/jpeg.c --- a/coders/jpeg.c Sun May 26 11:20:06 2024 -0500 +++ b/coders/jpeg.c Sat Jun 01 08:49:41 2024 -0500 @@ -1173,57 +1173,130 @@ /* Format JPEG sampling factors to a string. */ -static void +static MagickPassFail FormatJPEGSamplingFactors(const struct jpeg_decompress_struct *jpeg_info, char *sampling_factors) { + unsigned int + quantums = 0; + + MagickPassFail + status = MagickFail; + switch (jpeg_info->out_color_space) { - case JCS_CMYK: - { - (void) FormatString(sampling_factors,"%dx%d,%dx%d,%dx%d,%dx%d", - jpeg_info->comp_info[0].h_samp_factor, - jpeg_info->comp_info[0].v_samp_factor, - jpeg_info->comp_info[1].h_samp_factor, - jpeg_info->comp_info[1].v_samp_factor, - jpeg_info->comp_info[2].h_samp_factor, - jpeg_info->comp_info[2].v_samp_factor, - jpeg_info->comp_info[3].h_samp_factor, - jpeg_info->comp_info[3].v_samp_factor); - break; - } + default: + case JCS_UNKNOWN: + /* error/unspecified */ + break; case JCS_GRAYSCALE: - { - (void) FormatString(sampling_factors,"%dx%d", - jpeg_info->comp_info[0].h_samp_factor, - jpeg_info->comp_info[0].v_samp_factor); - break; - } + /* monochrome */ + quantums = 1; + break; case JCS_RGB: - { - (void) FormatString(sampling_factors,"%dx%d,%dx%d,%dx%d", - jpeg_info->comp_info[0].h_samp_factor, - jpeg_info->comp_info[0].v_samp_factor, - jpeg_info->comp_info[1].h_samp_factor, - jpeg_info->comp_info[1].v_samp_factor, - jpeg_info->comp_info[2].h_samp_factor, - jpeg_info->comp_info[2].v_samp_factor); - break; - } - default: - { - (void) FormatString(sampling_factors,"%dx%d,%dx%d,%dx%d,%dx%d", - jpeg_info->comp_info[0].h_samp_factor, - jpeg_info->comp_info[0].v_samp_factor, - jpeg_info->comp_info[1].h_samp_factor, - jpeg_info->comp_info[1].v_samp_factor, - jpeg_info->comp_info[2].h_samp_factor, - jpeg_info->comp_info[2].v_samp_factor, - jpeg_info->comp_info[3].h_samp_factor, - jpeg_info->comp_info[3].v_samp_factor); - break; - } + /* red/green/blue as specified by the RGB_RED, RGB_GREEN, + RGB_BLUE, and RGB_PIXELSIZE macros */ + quantums = 3; + break; + case JCS_YCbCr: + /* Y/Cb/Cr (also known as YUV) */ + quantums = 3; + break; + case JCS_CMYK: + /* C/M/Y/K */ + quantums = 4; + break; + case JCS_YCCK: + /* Y/Cb/Cr/K */ + quantums = 4; + break; +#if 0 +#if defined(JCS_EXTENSIONS) && JCS_EXTENSIONS + case JCS_EXT_RGB: + /* red/green/blue */ + quantums = 3; + break; + case JCS_EXT_RGBX: + /* red/green/blue/x */ + quantums = 4; + break; + case JCS_EXT_BGR: + /* blue/green/red */ + quantums = 3; + break; + case JCS_EXT_BGRX: + /* blue/green/red/x */ + quantums = 4; + break; + case JCS_EXT_XBGR: + /* x/blue/green/red */ + quantums = 4; + break; + case JCS_EXT_XRGB: + /* x/red/green/blue */ + quantums = 4; + break; + +#if defined(JCS_ALPHA_EXTENSIONS) && JCS_ALPHA_EXTENSIONS + case JCS_EXT_RGBA: + /* red/green/blue/alpha */ + quantums = 4; + break; + case JCS_EXT_BGRA: + /* blue/green/red/alpha */ + quantums = 4; + break; + case JCS_EXT_ABGR: + /* alpha/blue/green/red */ + quantums = 4; + break; + case JCS_EXT_ARGB: + /* alpha/red/green/blue */ + quantums = 4; + break; + case JCS_RGB565: + /* 5-bit red/6-bit green/5-bit blue [decompression only] */ + quantums = 3; + break; +#endif /* defined(JCS_ALPHA_EXTENSIONS) && JCS_ALPHA_EXTENSIONS */ +#endif /* if defined(JCS_EXTENSIONS) && JCS_EXTENSIONS */ +#endif } + + switch (quantums) + { + case 0: + break; + case 1: + (void) FormatString(sampling_factors,"%dx%d", + jpeg_info->comp_info[0].h_samp_factor, + jpeg_info->comp_info[0].v_samp_factor); + status = MagickPass; + break; + case 3: + (void) FormatString(sampling_factors,"%dx%d,%dx%d,%dx%d", + jpeg_info->comp_info[0].h_samp_factor, + jpeg_info->comp_info[0].v_samp_factor, + jpeg_info->comp_info[1].h_samp_factor, + jpeg_info->comp_info[1].v_samp_factor, + jpeg_info->comp_info[2].h_samp_factor, + jpeg_info->comp_info[2].v_samp_factor); + status = MagickPass; + break; + case 4: + (void) FormatString(sampling_factors,"%dx%d,%dx%d,%dx%d,%dx%d", + jpeg_info->comp_info[0].h_samp_factor, + jpeg_info->comp_info[0].v_samp_factor, + jpeg_info->comp_info[1].h_samp_factor, + jpeg_info->comp_info[1].v_samp_factor, + jpeg_info->comp_info[2].h_samp_factor, + jpeg_info->comp_info[2].v_samp_factor, + jpeg_info->comp_info[3].h_samp_factor, + jpeg_info->comp_info[3].v_samp_factor); + status = MagickPass; + break; + } + return status; } static MagickBool @@ -1616,11 +1689,13 @@ "Colorspace: %s (%d)", attribute, jpeg_info.out_color_space); - FormatJPEGSamplingFactors(&jpeg_info,attribute); - (void) SetImageAttribute(image,"JPEG-Sampling-factors",attribute); - if (image->logging) - (void) LogMagickEvent(CoderEvent,GetMagickModule(), - "Sampling Factors: %s", attribute); + if (FormatJPEGSamplingFactors(&jpeg_info,attribute) != MagickFail) + { + (void) SetImageAttribute(image,"JPEG-Sampling-factors",attribute); + if (image->logging) + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + "Sampling Factors: %s", attribute); + } } image->depth=Min(jpeg_info.data_precision,Min(16,QuantumDepth)); diff -r 5e5f228181f4 -r 5488b5300b26 magick/version.h --- a/magick/version.h Sun May 26 11:20:06 2024 -0500 +++ b/magick/version.h Sat Jun 01 08:49:41 2024 -0500 @@ -38,8 +38,8 @@ #define MagickLibVersion 0x282500 #define MagickLibVersionText "1.4" #define MagickLibVersionNumber 28,25,0 -#define MagickChangeDate "20240526" -#define MagickReleaseDate "snapshot-20240526" +#define MagickChangeDate "20240601" +#define MagickReleaseDate "snapshot-20240601" /* The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines diff -r 5e5f228181f4 -r 5488b5300b26 www/ChangeLog.html --- a/www/ChangeLog.html Sun May 26 11:20:06 2024 -0500 +++ b/www/ChangeLog.html Sat Jun 01 08:49:41 2024 -0500 @@ -38,6 +38,15 @@ <div class="document" id="graphicsmagick-changelog"> <h1 class="title">GraphicsMagick ChangeLog</h1> +<p>2024-06-01 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p> +<blockquote> +<ul class="simple"> +<li><p>coders/jpeg.c (FormatJPEGSamplingFactors): Properly handle the +number of samples for each colorspace. Addresses oss-fuzz 68737: +"graphicsmagick:coder_DCM_fuzzer: Use-of-uninitialized-value in +ReadJPEGImage".</p></li> +</ul> +</blockquote> <p>2024-05-26 Fojtik Jaroslav <<a class="reference external" href="mailto:JaFojtik%40yandex.com">JaFojtik<span>@</span>yandex<span>.</span>com</a>></p> <blockquote> <ul class="simple">