1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
From: Cristy <mikayla-grace@urban-warrior.org>
Date: Thu, 23 Dec 2021 06:46:46 -0500
Subject: improved fix for possible DoS for certain SVG constructs
This is partial fix CVE-2023-1289
origin: https://github.com/ImageMagick/ImageMagick6/commit/84ec30550c3146f525383f18a786a6bbd5028a93.patch
---
magick/draw.c | 36 +++++++++++++++++++++++++-----------
1 file changed, 25 insertions(+), 11 deletions(-)
diff --git a/magick/draw.c b/magick/draw.c
index c27cb9a..bab9b47 100644
--- a/magick/draw.c
+++ b/magick/draw.c
@@ -5459,19 +5459,33 @@ MagickExport MagickBooleanType DrawPrimitive(Image *image,
else
if (*primitive_info->text != '\0')
{
+ MagickBooleanType
+ status;
+
+ struct stat
+ attributes;
+
+ (void) CopyMagickString(clone_info->filename,primitive_info->text,
+ MagickPathExtent);
(void) CopyMagickString(clone_info->filename,primitive_info->text,
MagickPathExtent);
- status&=SetImageInfo(clone_info,1,exception);
- if (clone_info->size != (char *) NULL)
- clone_info->size=DestroyString(clone_info->size);
- if (clone_info->extract != (char *) NULL)
- clone_info->extract=DestroyString(clone_info->extract);
- if ((LocaleNCompare(clone_info->magick,"http",4) == 0) ||
- (LocaleCompare(clone_info->magick,"mpri") == 0))
- (void) CopyMagickString(clone_info->filename,primitive_info->text,
- MagickPathExtent);
- if (*clone_info->filename != '\0')
- composite_images=ReadImage(clone_info,exception);
+ status=GetPathAttributes(clone_info->filename,&attributes);
+ if ((status != MagickFalse) && (S_ISCHR(attributes.st_mode) == 0))
+ {
+ status&=SetImageInfo(clone_info,1,exception);
+ (void) CopyMagickString(clone_info->filename,
+ primitive_info->text,MagickPathExtent);
+ if (clone_info->size != (char *) NULL)
+ clone_info->size=DestroyString(clone_info->size);
+ if (clone_info->extract != (char *) NULL)
+ clone_info->extract=DestroyString(clone_info->extract);
+ if ((LocaleCompare(clone_info->magick,"file") == 0) ||
+ (LocaleCompare(clone_info->magick,"https") == 0) ||
+ (LocaleCompare(clone_info->magick,"http") == 0) ||
+ (LocaleCompare(clone_info->magick,"mpri") == 0) ||
+ (IsPathAccessible(clone_info->filename) != MagickFalse))
+ composite_images=ReadImage(clone_info,exception);
+ }
}
clone_info=DestroyImageInfo(clone_info);
if (composite_images == (Image *) NULL)
|