Sufficient patch for CVE-2005-4601?

Albert Chin <[email protected]> Wed, 1 Mar 2006 09:54:29 -0600
Newsgroups gmane.comp.video.graphicsmagick.core
Message-ID <[email protected]>
Is the attached patch ok for CVE-2005-4601? It is taken from the
Debian patch for ImageMagick 5.4.4.5.

-- 
albert chin ([email protected])

-- snip snip
Index: magick/delegate.c
===================================================================
RCS file: /GraphicsMagick/GraphicsMagick/magick/delegate.c,v
retrieving revision 1.124
diff -u -3 -p -r1.124 delegate.c
--- magick/delegate.c	10 May 2005 17:07:21 -0000	1.124
+++ magick/delegate.c	1 Mar 2006 15:53:40 -0000
@@ -337,6 +337,8 @@ MagickExport const DelegateInfo *GetDele
 %
 %
 */
+#define ProhibitedAlphabet  "*?\"'<>|`$"
+
 MagickExport unsigned int InvokeDelegate(ImageInfo *image_info,Image *image,
   const char *decode,const char *encode,ExceptionInfo *exception)
 {
@@ -399,9 +401,9 @@ MagickExport unsigned int InvokeDelegate
       image_info->temporary=True;
     }
 
-  if (delegate_info->mode != 0)
-    if ((decode && (delegate_info->encode != (char *) NULL)) ||
-        (encode && (delegate_info->decode != (char *) NULL)))
+  if ((delegate_info->mode != 0) &&
+       ((decode && (delegate_info->encode != (char *) NULL)) ||
+        (encode && (delegate_info->decode != (char *) NULL))))
       {
         char
           filename[MaxTextExtent],
@@ -433,6 +435,13 @@ MagickExport unsigned int InvokeDelegate
           (void) ThrowException(exception,FileOpenError,UnableToCreateTemporaryFile,image_info->zero);
           return(False);
         }
+        if ((strpbrk(image_info->filename,ProhibitedAlphabet) != (char *) NULL) ||
+            (strpbrk(image->filename,ProhibitedAlphabet) != (char *) NULL))
+          {
+            ThrowException(exception,FileOpenError,
+              FilenameContainsProhibitedCharacters,image->filename);
+            return(False);
+          }
         /* Expand sprintf-style codes in delegate command to command string */
         magick=TranslateText(image_info,image,decode != (char *) NULL ?
           delegate_info->encode : delegate_info->decode);
@@ -511,6 +520,13 @@ MagickExport unsigned int InvokeDelegate
       status=False;
       goto error_exit;
     }
+    if ((strpbrk(image_info->filename,ProhibitedAlphabet) != (char *) NULL) ||
+        (strpbrk(image->filename,ProhibitedAlphabet) != (char *) NULL))
+      {
+        ThrowException(exception,FileOpenError,
+          FilenameContainsProhibitedCharacters,image->filename);
+        break;
+      }
     /* Expand sprintf-style codes in delegate command to command string */
     command=TranslateText(image_info,image,commands[i]);
     if (command == (char *) NULL)
Index: magick/locale_c.h
===================================================================
RCS file: /GraphicsMagick/GraphicsMagick/magick/locale_c.h,v
retrieving revision 1.23
diff -u -3 -p -r1.23 locale_c.h
--- magick/locale_c.h	17 Feb 2005 05:42:49 -0000	1.23
+++ magick/locale_c.h	1 Mar 2006 15:53:41 -0000
@@ -3,7 +3,7 @@
 
 extern MagickExport const char *GetLocaleMessageFromID(const int);
 
-#define MAX_LOCALE_MSGS 485
+#define MAX_LOCALE_MSGS 486
 
 #define MGK_BlobErrorUnableToCreateBlob 1
 #define MGK_BlobErrorUnableToOpenFile 2
@@ -490,6 +490,7 @@ extern MagickExport const char *GetLocal
 #define MGK_XServerFatalErrorUnableToViewFonts 483
 #define MGK_XServerWarningUnableToGetVisual 484
 #define MGK_XServerWarningUsingDefaultVisual 485
+#define MGK_FileOpenErrorFilenameContainsProhibitedCharacters 486
 
 #endif
 
@@ -584,7 +585,7 @@ static const SeverityInfo severity_map[]
     { "XServer/Error", 445, XServerError },
     { "XServer/FatalError", 467, XServerFatalError },
     { "XServer/Warning", 483, XServerWarning },
-    { 0, 485, UndefinedException }
+    { 0, 486, UndefinedException }
   };
 #endif
 
@@ -1082,6 +1083,7 @@ static const MessageInfo message_map[] =
     { "UnableToViewFonts", 483 },
     { "UnableToGetVisual", 484 },
     { "UsingDefaultVisual", 485 },
+    { "FilenameContainsProhibitedCharacters", 486 },
     { 0, 0 }
   };
 #endif
@@ -1575,6 +1577,7 @@ static const char *message_dat[] =
     "Unable to view fonts",
     "Unable to get visual",
     "UsingDefaultVisual",
+    "Filename Contains Prohibited Characters",
     0
   };
 #endif


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642