Commit 4079949ba for imagemagick.org
commit 4079949bae0cde7e683df2e63c40f2e36f52c1b6
Author: Cristy <urban-warrior@imagemagick.org>
Date: Fri Jun 5 08:19:45 2026 -0400
https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-hwf3-r46v-5ggx
diff --git a/MagickCore/string.c b/MagickCore/string.c
index a1a385060..46d115055 100644
--- a/MagickCore/string.c
+++ b/MagickCore/string.c
@@ -1494,60 +1494,64 @@ MagickExport MagickBooleanType IsStringFalse(const char *value)
MagickExport void PrintStringInfo(FILE *file,const char *id,
const StringInfo *string_info)
{
- const char
+ const unsigned char
*p;
size_t
i,
j;
+ /*
+ Check if string is printable.
+ */
assert(id != (const char *) NULL);
assert(string_info != (StringInfo *) NULL);
assert(string_info->signature == MagickCoreSignature);
- p=(char *) string_info->datum;
+ p=(const unsigned char *) string_info->datum;
for (i=0; i < string_info->length; i++)
- {
- if (((int) ((unsigned char) *p) < 32) &&
- (isspace((int) ((unsigned char) *p)) == 0))
+ if ((p[i] < 32) && (isspace((int)p[i]) == 0))
break;
- p++;
- }
(void) FormatLocaleFile(file,"%s(%.20g):\n",id,(double) string_info->length);
if (i == string_info->length)
- {
- for (i=0; i < string_info->length; i++)
- (void) fputc(string_info->datum[i],file);
- (void) fputc('\n',file);
- return;
- }
+ {
+ for (i = 0; i < string_info->length; i++)
+ (void) fputc(p[i],file);
+ (void) fputc('\n',file);
+ return;
+ }
/*
Convert string to a HEX list.
*/
- p=(char *) string_info->datum;
for (i=0; i < string_info->length; i+=CharsPerLine)
{
- (void) FormatLocaleFile(file,"0x%08lx: ",(unsigned long) (CharsPerLine*i));
- for (j=1; j <= MagickMin(string_info->length-i,CharsPerLine); j++)
+ (void) FormatLocaleFile(file,"0x%08lx: ",(unsigned long) i);
+ for (j = 0; j < MagickMin(string_info->length-i, CharsPerLine); j++)
{
- (void) FormatLocaleFile(file,"%02lx",(unsigned long) (*(p+j)) & 0xff);
- if ((j % 0x04) == 0)
+ (void) FormatLocaleFile(file,"%02lx",(unsigned long) (p[i+j]) & 0xff);
+ if (((j+1) % 0x04) == 0)
(void) fputc(' ',file);
}
- for ( ; j <= CharsPerLine; j++)
+ /*
+ Padding.
+ */
+ for ( ; j < CharsPerLine; j++)
{
(void) fputc(' ',file);
(void) fputc(' ',file);
- if ((j % 0x04) == 0)
+ if (((j+1) % 0x04) == 0)
(void) fputc(' ',file);
}
(void) fputc(' ',file);
- for (j=1; j <= MagickMin(string_info->length-i,CharsPerLine); j++)
+ /*
+ ASCII section.
+ */
+ for (j=0; j < MagickMin(string_info->length-i,CharsPerLine); j++)
{
- if (isprint((int) ((unsigned char) *p)) != 0)
- (void) fputc(*p,file);
+ unsigned char c = p[i+j];
+ if (isprint((int) c) != 0)
+ (void) fputc(c,file);
else
(void) fputc('-',file);
- p++;
}
(void) fputc('\n',file);
}