Compare commits
1 Commits
Author | SHA256 | Date | |
---|---|---|---|
|
62e38932f6 |
63
ImageMagick-CVE-2025-55004.patch
Normal file
63
ImageMagick-CVE-2025-55004.patch
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
From 55d97055e00a7bc7ae2776c99824002fbb4a72aa Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cristy <urban-warrior@imagemagick.org>
|
||||||
|
Date: Thu, 7 Aug 2025 19:14:00 -0400
|
||||||
|
Subject: [PATCH]
|
||||||
|
https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-cjc8-g9w8-chfw
|
||||||
|
|
||||||
|
---
|
||||||
|
coders/png.c | 33 ++++++++++-----------------------
|
||||||
|
1 file changed, 10 insertions(+), 23 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/coders/png.c b/coders/png.c
|
||||||
|
index 5f3d33a4206..f7ae779b2fe 100644
|
||||||
|
--- a/coders/png.c
|
||||||
|
+++ b/coders/png.c
|
||||||
|
@@ -4791,37 +4791,24 @@ static Image *ReadOneJNGImage(MngReadInfo *mng_info,
|
||||||
|
jng_image=ReadImage(alpha_image_info,exception);
|
||||||
|
|
||||||
|
if (jng_image != (Image *) NULL)
|
||||||
|
- for (y=0; y < (ssize_t) image->rows; y++)
|
||||||
|
{
|
||||||
|
- s=GetVirtualPixels(jng_image,0,y,image->columns,1,exception);
|
||||||
|
- q=GetAuthenticPixels(image,0,y,image->columns,1,exception);
|
||||||
|
- if ((s == (const Quantum *) NULL) || (q == (Quantum *) NULL))
|
||||||
|
- break;
|
||||||
|
+ image->alpha_trait=BlendPixelTrait;
|
||||||
|
+ for (y=0; y < (ssize_t) image->rows; y++)
|
||||||
|
+ {
|
||||||
|
+ s=GetVirtualPixels(jng_image,0,y,image->columns,1,exception);
|
||||||
|
+ q=GetAuthenticPixels(image,0,y,image->columns,1,exception);
|
||||||
|
+ if ((s == (const Quantum *) NULL) || (q == (Quantum *) NULL))
|
||||||
|
+ break;
|
||||||
|
|
||||||
|
- if (image->alpha_trait != UndefinedPixelTrait)
|
||||||
|
for (x=(ssize_t) image->columns; x != 0; x--)
|
||||||
|
{
|
||||||
|
SetPixelAlpha(image,GetPixelRed(jng_image,s),q);
|
||||||
|
q+=(ptrdiff_t) GetPixelChannels(image);
|
||||||
|
s+=(ptrdiff_t) GetPixelChannels(jng_image);
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- else
|
||||||
|
- for (x=(ssize_t) image->columns; x != 0; x--)
|
||||||
|
- {
|
||||||
|
- Quantum
|
||||||
|
- alpha;
|
||||||
|
-
|
||||||
|
- alpha=GetPixelRed(jng_image,s);
|
||||||
|
- SetPixelAlpha(image,alpha,q);
|
||||||
|
- if (alpha != OpaqueAlpha)
|
||||||
|
- image->alpha_trait=BlendPixelTrait;
|
||||||
|
- q+=(ptrdiff_t) GetPixelChannels(image);
|
||||||
|
- s+=(ptrdiff_t) GetPixelChannels(jng_image);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (SyncAuthenticPixels(image,exception) == MagickFalse)
|
||||||
|
- break;
|
||||||
|
+ if (SyncAuthenticPixels(image,exception) == MagickFalse)
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
(void) RelinquishUniqueFileResource(alpha_image->filename);
|
||||||
|
alpha_image=DestroyImageList(alpha_image);
|
||||||
|
|
32
ImageMagick-CVE-2025-55005.patch
Normal file
32
ImageMagick-CVE-2025-55005.patch
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
From b68bb6d3cfe472d5bd9329b4172e2e4f63d90a57 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cristy <urban-warrior@imagemagick.org>
|
||||||
|
Date: Thu, 7 Aug 2025 22:05:10 -0400
|
||||||
|
Subject: [PATCH]
|
||||||
|
https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-v393-38qx-v8fp
|
||||||
|
|
||||||
|
---
|
||||||
|
MagickCore/colorspace.c | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/MagickCore/colorspace.c b/MagickCore/colorspace.c
|
||||||
|
index 7ac78a683d8..4b4866a60e4 100644
|
||||||
|
--- a/MagickCore/colorspace.c
|
||||||
|
+++ b/MagickCore/colorspace.c
|
||||||
|
@@ -2420,10 +2420,16 @@ static MagickBooleanType TransformsRGBImage(Image *image,
|
||||||
|
value=GetImageProperty(image,"reference-black",exception);
|
||||||
|
if (value != (const char *) NULL)
|
||||||
|
reference_black=StringToDouble(value,(char **) NULL);
|
||||||
|
+ if (reference_black > 1024.0)
|
||||||
|
+ reference_black=1024.0;
|
||||||
|
reference_white=ReferenceWhite;
|
||||||
|
value=GetImageProperty(image,"reference-white",exception);
|
||||||
|
if (value != (const char *) NULL)
|
||||||
|
reference_white=StringToDouble(value,(char **) NULL);
|
||||||
|
+ if (reference_white > 1024.0)
|
||||||
|
+ reference_white=1024.0;
|
||||||
|
+ if (reference_black > reference_white)
|
||||||
|
+ reference_black=reference_white;
|
||||||
|
logmap=(Quantum *) AcquireQuantumMemory((size_t) MaxMap+1UL,
|
||||||
|
sizeof(*logmap));
|
||||||
|
if (logmap == (Quantum *) NULL)
|
||||||
|
|
75
ImageMagick-CVE-2025-55154.patch
Normal file
75
ImageMagick-CVE-2025-55154.patch
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
Index: ImageMagick-7.1.2-0/coders/png.c
|
||||||
|
===================================================================
|
||||||
|
--- ImageMagick-7.1.2-0.orig/coders/png.c
|
||||||
|
+++ ImageMagick-7.1.2-0/coders/png.c
|
||||||
|
@@ -6403,7 +6403,7 @@ static Image *ReadOneMNGImage(MngReadInf
|
||||||
|
if (((mng_info->magn_methx > 0) && (mng_info->magn_methx <= 5)) &&
|
||||||
|
((mng_info->magn_methy > 0) && (mng_info->magn_methy <= 5)))
|
||||||
|
{
|
||||||
|
- png_uint_32
|
||||||
|
+ size_t
|
||||||
|
magnified_height,
|
||||||
|
magnified_width;
|
||||||
|
|
||||||
|
@@ -6417,19 +6417,19 @@ static Image *ReadOneMNGImage(MngReadInf
|
||||||
|
mng_info->magn_methy = 1;
|
||||||
|
if (mng_info->magn_methx == 1)
|
||||||
|
{
|
||||||
|
- magnified_width=mng_info->magn_ml;
|
||||||
|
+ magnified_width=(size_t) mng_info->magn_ml;
|
||||||
|
|
||||||
|
if (image->columns > 1)
|
||||||
|
magnified_width += mng_info->magn_mr;
|
||||||
|
|
||||||
|
if (image->columns > 2)
|
||||||
|
- magnified_width += (png_uint_32)
|
||||||
|
+ magnified_width += (size_t)
|
||||||
|
((image->columns-2)*(mng_info->magn_mx));
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- magnified_width=(png_uint_32) image->columns;
|
||||||
|
+ magnified_width=(size_t) image->columns;
|
||||||
|
|
||||||
|
if (image->columns > 1)
|
||||||
|
magnified_width += mng_info->magn_ml-1;
|
||||||
|
@@ -6438,25 +6438,25 @@ static Image *ReadOneMNGImage(MngReadInf
|
||||||
|
magnified_width += mng_info->magn_mr-1;
|
||||||
|
|
||||||
|
if (image->columns > 3)
|
||||||
|
- magnified_width += (png_uint_32)
|
||||||
|
+ magnified_width += (size_t)
|
||||||
|
((image->columns-3)*(mng_info->magn_mx-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mng_info->magn_methy == 1)
|
||||||
|
{
|
||||||
|
- magnified_height=mng_info->magn_mt;
|
||||||
|
+ magnified_height=(size_t) mng_info->magn_mt;
|
||||||
|
|
||||||
|
if (image->rows > 1)
|
||||||
|
magnified_height += mng_info->magn_mb;
|
||||||
|
|
||||||
|
if (image->rows > 2)
|
||||||
|
- magnified_height += (png_uint_32)
|
||||||
|
+ magnified_height += (size_t)
|
||||||
|
((image->rows-2)*(mng_info->magn_my));
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- magnified_height=(png_uint_32) image->rows;
|
||||||
|
+ magnified_height=(size_t) image->rows;
|
||||||
|
|
||||||
|
if (image->rows > 1)
|
||||||
|
magnified_height += mng_info->magn_mt-1;
|
||||||
|
@@ -6465,7 +6465,7 @@ static Image *ReadOneMNGImage(MngReadInf
|
||||||
|
magnified_height += mng_info->magn_mb-1;
|
||||||
|
|
||||||
|
if (image->rows > 3)
|
||||||
|
- magnified_height += (png_uint_32)
|
||||||
|
+ magnified_height += (size_t)
|
||||||
|
((image->rows-3)*(mng_info->magn_my-1));
|
||||||
|
}
|
||||||
|
|
157
ImageMagick-CVE-2025-55160.patch
Normal file
157
ImageMagick-CVE-2025-55160.patch
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
From 63d8769dd6a8f32f4096c71be9e08a2c081e47da Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cristy <urban-warrior@imagemagick.org>
|
||||||
|
Date: Sun, 10 Aug 2025 08:28:28 -0400
|
||||||
|
Subject: [PATCH]
|
||||||
|
https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-6hgw-6x87-578x
|
||||||
|
|
||||||
|
---
|
||||||
|
MagickCore/artifact.c | 17 ++++++++++++++++-
|
||||||
|
MagickCore/option.c | 17 ++++++++++++++++-
|
||||||
|
MagickCore/profile.c | 19 ++++++++++++++++++-
|
||||||
|
MagickCore/property.c | 18 ++++++++++++++++--
|
||||||
|
4 files changed, 66 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/MagickCore/artifact.c b/MagickCore/artifact.c
|
||||||
|
index dae6aaaf0b1..764ef75a44b 100644
|
||||||
|
--- a/MagickCore/artifact.c
|
||||||
|
+++ b/MagickCore/artifact.c
|
||||||
|
@@ -99,6 +99,21 @@
|
||||||
|
% o clone_image: the source image for artifacts to clone.
|
||||||
|
%
|
||||||
|
*/
|
||||||
|
+
|
||||||
|
+typedef char
|
||||||
|
+ *(*CloneKeyFunc)(const char *),
|
||||||
|
+ *(*CloneValueFunc)(const char *);
|
||||||
|
+
|
||||||
|
+static inline void *CloneArtifactKey(void *key)
|
||||||
|
+{
|
||||||
|
+ return((void *) ((CloneKeyFunc) ConstantString)((const char *) key));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline void *CloneArtifactValue(void *value)
|
||||||
|
+{
|
||||||
|
+ return((void *) ((CloneValueFunc) ConstantString)((const char *) value));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
MagickExport MagickBooleanType CloneImageArtifacts(Image *image,
|
||||||
|
const Image *clone_image)
|
||||||
|
{
|
||||||
|
@@ -117,7 +132,7 @@ MagickExport MagickBooleanType CloneImageArtifacts(Image *image,
|
||||||
|
if (image->artifacts != (void *) NULL)
|
||||||
|
DestroyImageArtifacts(image);
|
||||||
|
image->artifacts=CloneSplayTree((SplayTreeInfo *) clone_image->artifacts,
|
||||||
|
- (void *(*)(void *)) ConstantString,(void *(*)(void *)) ConstantString);
|
||||||
|
+ CloneArtifactKey,CloneArtifactValue);
|
||||||
|
}
|
||||||
|
return(MagickTrue);
|
||||||
|
}
|
||||||
|
diff --git a/MagickCore/option.c b/MagickCore/option.c
|
||||||
|
index 621b0f9b26d..f844f44d6af 100644
|
||||||
|
--- a/MagickCore/option.c
|
||||||
|
+++ b/MagickCore/option.c
|
||||||
|
@@ -2361,6 +2361,21 @@ static const OptionInfo
|
||||||
|
% o clone_info: the source image info for options to clone.
|
||||||
|
%
|
||||||
|
*/
|
||||||
|
+
|
||||||
|
+typedef char
|
||||||
|
+ *(*CloneKeyFunc)(const char *),
|
||||||
|
+ *(*CloneValueFunc)(const char *);
|
||||||
|
+
|
||||||
|
+static inline void *CloneOptionKey(void *key)
|
||||||
|
+{
|
||||||
|
+ return((void *) ((CloneKeyFunc) ConstantString)((const char *) key));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline void *CloneOptionValue(void *value)
|
||||||
|
+{
|
||||||
|
+ return((void *) ((CloneValueFunc) ConstantString)((const char *) value));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
MagickExport MagickBooleanType CloneImageOptions(ImageInfo *image_info,
|
||||||
|
const ImageInfo *clone_info)
|
||||||
|
{
|
||||||
|
@@ -2376,7 +2391,7 @@ MagickExport MagickBooleanType CloneImageOptions(ImageInfo *image_info,
|
||||||
|
if (image_info->options != (void *) NULL)
|
||||||
|
DestroyImageOptions(image_info);
|
||||||
|
image_info->options=CloneSplayTree((SplayTreeInfo *) clone_info->options,
|
||||||
|
- (void *(*)(void *)) ConstantString,(void *(*)(void *)) ConstantString);
|
||||||
|
+ CloneOptionKey,CloneOptionValue);
|
||||||
|
}
|
||||||
|
return(MagickTrue);
|
||||||
|
}
|
||||||
|
diff --git a/MagickCore/profile.c b/MagickCore/profile.c
|
||||||
|
index fac191845f1..8e38b301bb1 100644
|
||||||
|
--- a/MagickCore/profile.c
|
||||||
|
+++ b/MagickCore/profile.c
|
||||||
|
@@ -143,6 +143,23 @@ typedef struct _CMSExceptionInfo
|
||||||
|
% o clone_image: the clone image.
|
||||||
|
%
|
||||||
|
*/
|
||||||
|
+
|
||||||
|
+typedef char
|
||||||
|
+ *(*CloneKeyFunc)(const char *);
|
||||||
|
+
|
||||||
|
+typedef StringInfo
|
||||||
|
+ *(*CloneValueFunc)(const StringInfo *);
|
||||||
|
+
|
||||||
|
+static inline void *CloneProfileKey(void *key)
|
||||||
|
+{
|
||||||
|
+ return((void *) ((CloneKeyFunc) ConstantString)((const char *) key));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline void *CloneProfileValue(void *value)
|
||||||
|
+{
|
||||||
|
+ return((void *) ((CloneValueFunc) CloneStringInfo)((const StringInfo *) value));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
MagickExport MagickBooleanType CloneImageProfiles(Image *image,
|
||||||
|
const Image *clone_image)
|
||||||
|
{
|
||||||
|
@@ -157,7 +174,7 @@ MagickExport MagickBooleanType CloneImageProfiles(Image *image,
|
||||||
|
if (image->profiles != (void *) NULL)
|
||||||
|
DestroyImageProfiles(image);
|
||||||
|
image->profiles=CloneSplayTree((SplayTreeInfo *) clone_image->profiles,
|
||||||
|
- (void *(*)(void *)) ConstantString,(void *(*)(void *)) CloneStringInfo);
|
||||||
|
+ CloneProfileKey,CloneProfileValue);
|
||||||
|
}
|
||||||
|
return(MagickTrue);
|
||||||
|
}
|
||||||
|
diff --git a/MagickCore/property.c b/MagickCore/property.c
|
||||||
|
index 09ae365dfa2..976ca34d70a 100644
|
||||||
|
--- a/MagickCore/property.c
|
||||||
|
+++ b/MagickCore/property.c
|
||||||
|
@@ -131,6 +131,21 @@
|
||||||
|
% o clone_image: the clone image.
|
||||||
|
%
|
||||||
|
*/
|
||||||
|
+
|
||||||
|
+typedef char
|
||||||
|
+ *(*CloneKeyFunc)(const char *),
|
||||||
|
+ *(*CloneValueFunc)(const char *);
|
||||||
|
+
|
||||||
|
+static inline void *ClonePropertyKey(void *key)
|
||||||
|
+{
|
||||||
|
+ return((void *) ((CloneKeyFunc) ConstantString)((const char *) key));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline void *ClonePropertyValue(void *value)
|
||||||
|
+{
|
||||||
|
+ return((void *) ((CloneValueFunc) ConstantString)((const char *) value));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
MagickExport MagickBooleanType CloneImageProperties(Image *image,
|
||||||
|
const Image *clone_image)
|
||||||
|
{
|
||||||
|
@@ -195,8 +210,7 @@ MagickExport MagickBooleanType CloneImageProperties(Image *image,
|
||||||
|
if (image->properties != (void *) NULL)
|
||||||
|
DestroyImageProperties(image);
|
||||||
|
image->properties=CloneSplayTree((SplayTreeInfo *)
|
||||||
|
- clone_image->properties,(void *(*)(void *)) ConstantString,
|
||||||
|
- (void *(*)(void *)) ConstantString);
|
||||||
|
+ clone_image->properties,ClonePropertyKey,ClonePropertyValue);
|
||||||
|
}
|
||||||
|
return(MagickTrue);
|
||||||
|
}
|
||||||
|
|
198
ImageMagick-filename-placeholder-regression-1.patch
Normal file
198
ImageMagick-filename-placeholder-regression-1.patch
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
From 82550750ec8f79393b381c3ed349dd495bbab8a7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cristy <urban-warrior@imagemagick.org>
|
||||||
|
Date: Sat, 19 Jul 2025 13:40:30 -0400
|
||||||
|
Subject: [PATCH] https://github.com/ImageMagick/ImageMagick/issues/8261
|
||||||
|
|
||||||
|
---
|
||||||
|
MagickCore/image.c | 134 +++++++++++++++++++--------------------------
|
||||||
|
1 file changed, 55 insertions(+), 79 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/MagickCore/image.c b/MagickCore/image.c
|
||||||
|
index b646df17041..2f859d14208 100644
|
||||||
|
--- a/MagickCore/image.c
|
||||||
|
+++ b/MagickCore/image.c
|
||||||
|
@@ -1651,34 +1651,41 @@ MagickExport size_t InterpretImageFilename(const ImageInfo *image_info,
|
||||||
|
ExceptionInfo *exception)
|
||||||
|
{
|
||||||
|
char
|
||||||
|
- *q;
|
||||||
|
+ *p = filename,
|
||||||
|
+ pattern[MagickPathExtent];
|
||||||
|
|
||||||
|
const char
|
||||||
|
- *p;
|
||||||
|
-
|
||||||
|
- int
|
||||||
|
- c;
|
||||||
|
-
|
||||||
|
- MagickBooleanType
|
||||||
|
- canonical;
|
||||||
|
-
|
||||||
|
- ssize_t
|
||||||
|
- offset;
|
||||||
|
+ *cursor = format;
|
||||||
|
|
||||||
|
- canonical=MagickFalse;
|
||||||
|
- offset=0;
|
||||||
|
+ /*
|
||||||
|
+ Start with a copy of the format string.
|
||||||
|
+ */
|
||||||
|
(void) CopyMagickString(filename,format,MagickPathExtent);
|
||||||
|
if (IsStringTrue(GetImageOption(image_info,"filename:literal")) != MagickFalse)
|
||||||
|
return(strlen(filename));
|
||||||
|
- for (p=strchr(format,'%'); p != (char *) NULL; p=strchr(p+1,'%'))
|
||||||
|
+ while ((cursor=strchr(cursor,'%')) != (const char *) NULL)
|
||||||
|
{
|
||||||
|
- q=(char *) p+1;
|
||||||
|
- if (*q == '%')
|
||||||
|
+ const char
|
||||||
|
+ *q = cursor;
|
||||||
|
+
|
||||||
|
+ ssize_t
|
||||||
|
+ offset = (ssize_t) (cursor-format);
|
||||||
|
+
|
||||||
|
+ cursor++; /* move past '%' */
|
||||||
|
+ if (*cursor == '%')
|
||||||
|
{
|
||||||
|
- p++;
|
||||||
|
+ /*
|
||||||
|
+ Escaped %%.
|
||||||
|
+ */
|
||||||
|
+ cursor++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
- switch (*q)
|
||||||
|
+ /*
|
||||||
|
+ Skip padding digits like %03d.
|
||||||
|
+ */
|
||||||
|
+ if (*cursor == '0')
|
||||||
|
+ (void) strtol(cursor,(char **) &cursor,10);
|
||||||
|
+ switch (*cursor)
|
||||||
|
{
|
||||||
|
case 'd':
|
||||||
|
case 'o':
|
||||||
|
@@ -1687,93 +1694,62 @@ MagickExport size_t InterpretImageFilename(const ImageInfo *image_info,
|
||||||
|
ssize_t
|
||||||
|
count;
|
||||||
|
|
||||||
|
- q++;
|
||||||
|
- c=(*q);
|
||||||
|
- *q='\0';
|
||||||
|
- count=FormatLocaleString(filename+(p-format-offset),(size_t)
|
||||||
|
- (MagickPathExtent-(p-format-offset)),p,value);
|
||||||
|
- if ((count <= 0) || (count > (MagickPathExtent-(p-format-offset))))
|
||||||
|
+ count=FormatLocaleString(pattern,sizeof(pattern),q,value);
|
||||||
|
+ if ((count <= 0) || (count >= MagickPathExtent))
|
||||||
|
return(0);
|
||||||
|
- offset+=(ssize_t) ((q-p)-count);
|
||||||
|
- *q=(char) c;
|
||||||
|
- (void) ConcatenateMagickString(filename,q,MagickPathExtent);
|
||||||
|
- canonical=MagickTrue;
|
||||||
|
- if (*(q-1) != '%')
|
||||||
|
- break;
|
||||||
|
- p++;
|
||||||
|
+ if ((offset+count) >= MagickPathExtent)
|
||||||
|
+ return(0);
|
||||||
|
+ (void) CopyMagickString(p+offset,pattern,(size_t) (MagickPathExtent-
|
||||||
|
+ offset));
|
||||||
|
+ cursor++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case '[':
|
||||||
|
{
|
||||||
|
- char
|
||||||
|
- pattern[MagickPathExtent];
|
||||||
|
-
|
||||||
|
const char
|
||||||
|
- *option;
|
||||||
|
+ *end = strchr(cursor,']'),
|
||||||
|
+ *option = (const char *) NULL;
|
||||||
|
|
||||||
|
- char
|
||||||
|
- *r;
|
||||||
|
-
|
||||||
|
- ssize_t
|
||||||
|
- i;
|
||||||
|
-
|
||||||
|
- ssize_t
|
||||||
|
- depth;
|
||||||
|
+ size_t
|
||||||
|
+ extent = (size_t) (end-cursor);
|
||||||
|
|
||||||
|
/*
|
||||||
|
- Image option.
|
||||||
|
+ Handle %[key:value];
|
||||||
|
*/
|
||||||
|
- if (strchr(p,']') == (char *) NULL)
|
||||||
|
+ if (end == (const char *) NULL)
|
||||||
|
break;
|
||||||
|
- depth=1;
|
||||||
|
- r=q+1;
|
||||||
|
- for (i=0; (i < (MagickPathExtent-1L)) && (*r != '\0'); i++)
|
||||||
|
- {
|
||||||
|
- if (*r == '[')
|
||||||
|
- depth++;
|
||||||
|
- if (*r == ']')
|
||||||
|
- depth--;
|
||||||
|
- if (depth <= 0)
|
||||||
|
- break;
|
||||||
|
- pattern[i]=(*r++);
|
||||||
|
- }
|
||||||
|
- pattern[i]='\0';
|
||||||
|
- if (LocaleNCompare(pattern,"filename:",9) != 0)
|
||||||
|
+ if (extent >= sizeof(pattern))
|
||||||
|
break;
|
||||||
|
- option=(const char *) NULL;
|
||||||
|
+ (void) CopyMagickString(pattern,cursor,extent);
|
||||||
|
+ pattern[extent]='\0';
|
||||||
|
if (image != (Image *) NULL)
|
||||||
|
option=GetImageProperty(image,pattern,exception);
|
||||||
|
- if ((option == (const char *) NULL) && (image != (Image *) NULL))
|
||||||
|
+ if ((option == (const char *) NULL) && (image != (Image *)NULL))
|
||||||
|
option=GetImageArtifact(image,pattern);
|
||||||
|
if ((option == (const char *) NULL) &&
|
||||||
|
(image_info != (ImageInfo *) NULL))
|
||||||
|
option=GetImageOption(image_info,pattern);
|
||||||
|
if (option == (const char *) NULL)
|
||||||
|
break;
|
||||||
|
- q--;
|
||||||
|
- c=(*q);
|
||||||
|
- *q='\0';
|
||||||
|
- (void) CopyMagickString(filename+(p-format-offset),option,(size_t)
|
||||||
|
- (MagickPathExtent-(p-format-offset)));
|
||||||
|
- offset+=(ssize_t) strlen(pattern)-(ssize_t) strlen(option)+3;
|
||||||
|
- *q=(char) c;
|
||||||
|
- (void) ConcatenateMagickString(filename,r+1,MagickPathExtent);
|
||||||
|
- canonical=MagickTrue;
|
||||||
|
- if (*(q-1) != '%')
|
||||||
|
- break;
|
||||||
|
- p++;
|
||||||
|
+ (void) CopyMagickString(p+offset,option,(size_t) (MagickPathExtent-
|
||||||
|
+ offset));
|
||||||
|
+ cursor=end+1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- if (canonical == MagickFalse)
|
||||||
|
- (void) CopyMagickString(filename,format,MagickPathExtent);
|
||||||
|
- else
|
||||||
|
- for (q=filename; *q != '\0'; q++)
|
||||||
|
- if ((*q == '%') && (*(q+1) == '%'))
|
||||||
|
- (void) CopyMagickString(q,q+1,(size_t) (MagickPathExtent-(q-filename)));
|
||||||
|
+ for (p=filename; *p != '\0'; )
|
||||||
|
+ {
|
||||||
|
+ /*
|
||||||
|
+ Replace "%%" with "%".
|
||||||
|
+ */
|
||||||
|
+ if ((*p == '%') && (*(p+1) == '%'))
|
||||||
|
+ (void) memmove(p,p+1,strlen(p)); /* shift left */
|
||||||
|
+ else
|
||||||
|
+ p++;
|
||||||
|
+ }
|
||||||
|
return(strlen(filename));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
14
ImageMagick-filename-placeholder-regression-2.patch
Normal file
14
ImageMagick-filename-placeholder-regression-2.patch
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
diff --git a/MagickCore/image.c b/MagickCore/image.c
|
||||||
|
index 2f859d14208..c19ac09f2b5 100644
|
||||||
|
--- a/MagickCore/image.c
|
||||||
|
+++ b/MagickCore/image.c
|
||||||
|
@@ -1733,6 +1733,8 @@ MagickExport size_t InterpretImageFilename(const ImageInfo *image_info,
|
||||||
|
break;
|
||||||
|
(void) CopyMagickString(p+offset,option,(size_t) (MagickPathExtent-
|
||||||
|
offset));
|
||||||
|
+ (void) ConcatenateMagickString(p+offset+strlen(option),end+1,(size_t)
|
||||||
|
+ (MagickPathExtent-offset-strlen(option)-strlen(end)-1));
|
||||||
|
cursor=end+1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
99
ImageMagick-filename-placeholder-regression-3.patch
Normal file
99
ImageMagick-filename-placeholder-regression-3.patch
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
From 6c7c8d5866b9c0ce6cc76a741e05b9482716101e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cristy <urban-warrior@imagemagick.org>
|
||||||
|
Date: Sat, 19 Jul 2025 16:07:21 -0400
|
||||||
|
Subject: [PATCH] more boundary checks
|
||||||
|
|
||||||
|
---
|
||||||
|
MagickCore/image.c | 35 ++++++++++++++++++++++-------------
|
||||||
|
1 file changed, 22 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/MagickCore/image.c b/MagickCore/image.c
|
||||||
|
index c19ac09f2b5..a1283ed5f19 100644
|
||||||
|
--- a/MagickCore/image.c
|
||||||
|
+++ b/MagickCore/image.c
|
||||||
|
@@ -1660,6 +1660,8 @@ MagickExport size_t InterpretImageFilename(const ImageInfo *image_info,
|
||||||
|
/*
|
||||||
|
Start with a copy of the format string.
|
||||||
|
*/
|
||||||
|
+ assert(format != (const char *) NULL);
|
||||||
|
+ assert(filename != (char *) NULL);
|
||||||
|
(void) CopyMagickString(filename,format,MagickPathExtent);
|
||||||
|
if (IsStringTrue(GetImageOption(image_info,"filename:literal")) != MagickFalse)
|
||||||
|
return(strlen(filename));
|
||||||
|
@@ -1683,7 +1685,7 @@ MagickExport size_t InterpretImageFilename(const ImageInfo *image_info,
|
||||||
|
/*
|
||||||
|
Skip padding digits like %03d.
|
||||||
|
*/
|
||||||
|
- if (*cursor == '0')
|
||||||
|
+ if (isdigit((int) ((unsigned char) *cursor)) != 0)
|
||||||
|
(void) strtol(cursor,(char **) &cursor,10);
|
||||||
|
switch (*cursor)
|
||||||
|
{
|
||||||
|
@@ -1695,9 +1697,8 @@ MagickExport size_t InterpretImageFilename(const ImageInfo *image_info,
|
||||||
|
count;
|
||||||
|
|
||||||
|
count=FormatLocaleString(pattern,sizeof(pattern),q,value);
|
||||||
|
- if ((count <= 0) || (count >= MagickPathExtent))
|
||||||
|
- return(0);
|
||||||
|
- if ((offset+count) >= MagickPathExtent)
|
||||||
|
+ if ((count <= 0) || (count >= MagickPathExtent) ||
|
||||||
|
+ ((offset+count) >= MagickPathExtent))
|
||||||
|
return(0);
|
||||||
|
(void) CopyMagickString(p+offset,pattern,(size_t) (MagickPathExtent-
|
||||||
|
offset));
|
||||||
|
@@ -1711,7 +1712,9 @@ MagickExport size_t InterpretImageFilename(const ImageInfo *image_info,
|
||||||
|
*option = (const char *) NULL;
|
||||||
|
|
||||||
|
size_t
|
||||||
|
- extent = (size_t) (end-cursor);
|
||||||
|
+ extent = (size_t) (end-cursor-1),
|
||||||
|
+ option_length,
|
||||||
|
+ tail_length;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Handle %[key:value];
|
||||||
|
@@ -1720,21 +1723,27 @@ MagickExport size_t InterpretImageFilename(const ImageInfo *image_info,
|
||||||
|
break;
|
||||||
|
if (extent >= sizeof(pattern))
|
||||||
|
break;
|
||||||
|
- (void) CopyMagickString(pattern,cursor,extent);
|
||||||
|
+ (void) CopyMagickString(pattern,cursor+1,extent+1);
|
||||||
|
pattern[extent]='\0';
|
||||||
|
if (image != (Image *) NULL)
|
||||||
|
- option=GetImageProperty(image,pattern,exception);
|
||||||
|
- if ((option == (const char *) NULL) && (image != (Image *)NULL))
|
||||||
|
- option=GetImageArtifact(image,pattern);
|
||||||
|
- if ((option == (const char *) NULL) &&
|
||||||
|
+ {
|
||||||
|
+ option=GetImageProperty(image,pattern,exception);
|
||||||
|
+ if (option == (const char *) NULL)
|
||||||
|
+ option=GetImageArtifact(image,pattern);
|
||||||
|
+ }
|
||||||
|
+ if ((option == (const char *) NULL) &&
|
||||||
|
(image_info != (ImageInfo *) NULL))
|
||||||
|
option=GetImageOption(image_info,pattern);
|
||||||
|
if (option == (const char *) NULL)
|
||||||
|
break;
|
||||||
|
+ option_length=strlen(option);
|
||||||
|
+ tail_length=strlen(end+1);
|
||||||
|
+ if ((offset+option_length+tail_length+1) > MagickPathExtent)
|
||||||
|
+ return(0);
|
||||||
|
(void) CopyMagickString(p+offset,option,(size_t) (MagickPathExtent-
|
||||||
|
offset));
|
||||||
|
- (void) ConcatenateMagickString(p+offset+strlen(option),end+1,(size_t)
|
||||||
|
- (MagickPathExtent-offset-strlen(option)-strlen(end)-1));
|
||||||
|
+ (void) ConcatenateMagickString(p+offset+option_length,end+1,(size_t) (
|
||||||
|
+ MagickPathExtent-offset-option_length-tail_length-1));
|
||||||
|
cursor=end+1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
@@ -1748,7 +1757,7 @@ MagickExport size_t InterpretImageFilename(const ImageInfo *image_info,
|
||||||
|
Replace "%%" with "%".
|
||||||
|
*/
|
||||||
|
if ((*p == '%') && (*(p+1) == '%'))
|
||||||
|
- (void) memmove(p,p+1,strlen(p)); /* shift left */
|
||||||
|
+ (void) memmove(p,p+1,strlen(p+1)+1); /* shift left */
|
||||||
|
else
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
@@ -1,3 +1,26 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 20 15:09:46 UTC 2025 - pgajdos@suse.com
|
||||||
|
|
||||||
|
- security update
|
||||||
|
- added patches
|
||||||
|
CVE-2025-55004 [bsc#1248076], heap buffer over-read in in ReadOneMNGIMage when processing images with separate alpha channels
|
||||||
|
+ ImageMagick-CVE-2025-55004.patch
|
||||||
|
CVE-2025-55005 [bsc#1248077], heap buffer overflow when transforming from Log to sRGB colorspaces
|
||||||
|
+ ImageMagick-CVE-2025-55005.patch
|
||||||
|
CVE-2025-55154 [bsc#1248078], integer overflow when performing magnified size calculations in ReadOneMNGIMage can lead to out-of-bounds write
|
||||||
|
+ ImageMagick-CVE-2025-55154.patch
|
||||||
|
CVE-2025-55160 [bsc#1248079], undefined behavior due to function-type-mismatch in CloneSplayTree
|
||||||
|
+ ImageMagick-CVE-2025-55160.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Aug 5 13:24:46 UTC 2025 - pgajdos@suse.com
|
||||||
|
|
||||||
|
- added patches
|
||||||
|
bsc#1247475 (https://github.com/ImageMagick/ImageMagick/issues/8261)
|
||||||
|
+ ImageMagick-filename-placeholder-regression-1.patch
|
||||||
|
+ ImageMagick-filename-placeholder-regression-2.patch
|
||||||
|
+ ImageMagick-filename-placeholder-regression-3.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jul 15 11:36:19 UTC 2025 - pgajdos@suse.com
|
Tue Jul 15 11:36:19 UTC 2025 - pgajdos@suse.com
|
||||||
|
|
||||||
|
@@ -50,6 +50,18 @@ Source3: ImageMagick.keyring
|
|||||||
Patch0: ImageMagick-configuration-SUSE.patch
|
Patch0: ImageMagick-configuration-SUSE.patch
|
||||||
Patch2: ImageMagick-library-installable-in-parallel.patch
|
Patch2: ImageMagick-library-installable-in-parallel.patch
|
||||||
Patch5: ImageMagick-s390x-disable-tests.patch
|
Patch5: ImageMagick-s390x-disable-tests.patch
|
||||||
|
# bsc#1247475 (https://github.com/ImageMagick/ImageMagick/issues/8261)
|
||||||
|
Patch6: ImageMagick-filename-placeholder-regression-1.patch
|
||||||
|
Patch7: ImageMagick-filename-placeholder-regression-2.patch
|
||||||
|
Patch8: ImageMagick-filename-placeholder-regression-3.patch
|
||||||
|
# CVE-2025-55005 [bsc#1248077], heap buffer overflow when transforming from Log to sRGB colorspaces
|
||||||
|
Patch9: ImageMagick-CVE-2025-55005.patch
|
||||||
|
# CVE-2025-55154 [bsc#1248078], integer overflow when performing magnified size calculations in ReadOneMNGIMage can lead to out-of-bounds write
|
||||||
|
Patch10: ImageMagick-CVE-2025-55154.patch
|
||||||
|
# CVE-2025-55004 [bsc#1248076], heap buffer over-read in in ReadOneMNGIMage when processing images with separate alpha channels
|
||||||
|
Patch11: ImageMagick-CVE-2025-55004.patch
|
||||||
|
# CVE-2025-55160 [bsc#1248079], undefined behavior due to function-type-mismatch in CloneSplayTree
|
||||||
|
Patch12: ImageMagick-CVE-2025-55160.patch
|
||||||
|
|
||||||
BuildRequires: chrpath
|
BuildRequires: chrpath
|
||||||
BuildRequires: dejavu-fonts
|
BuildRequires: dejavu-fonts
|
||||||
@@ -262,6 +274,13 @@ policy plus disable few other coders for reading and/or writing.
|
|||||||
%ifarch s390x
|
%ifarch s390x
|
||||||
%patch -P 5 -p1
|
%patch -P 5 -p1
|
||||||
%endif
|
%endif
|
||||||
|
%patch -P 6 -p1
|
||||||
|
%patch -P 7 -p1
|
||||||
|
%patch -P 8 -p1
|
||||||
|
%patch -P 9 -p1
|
||||||
|
%patch -P 10 -p1
|
||||||
|
%patch -P 11 -p1
|
||||||
|
%patch -P 12 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# bsc#1088463
|
# bsc#1088463
|
||||||
|
Reference in New Issue
Block a user