tag 345238 + patch
thanks

On Fri, Dec 30, 2005 at 02:19:27PM +0100, Florian Weimer wrote:
> With some user interaction, this is exploitable through Gnus and
> Thunderbird.  I think this warrants increasing the severity to
> "grave".

Here's the vanilla fix from upstream SVN, stripped off whitespace changes. 
I wonder why they've banned ` but still allow $(...), though.

Regards,

Daniel.

--- delegate.c.orig     2006-01-05 13:37:47.000000000 +0100
+++ delegate.c  2006-01-05 13:45:00.000000000 +0100
@@ -701,6 +701,8 @@
 MagickExport MagickBooleanType InvokeDelegate(ImageInfo *image_info,
   Image *image,const char *decode,const char *encode,ExceptionInfo *exception)
 {
+#define ProhibitedAlphabet  "*?\"'<>|`"
+
   char
     *command,
     **commands;
@@ -753,11 +755,11 @@
         }
       image_info->temporary=MagickTrue;
     }
-  if (delegate_info->mode != 0)
-    if (((decode != (const char *) NULL) &&
+  if ((delegate_info->mode != 0) &&
+      (((decode != (const char *) NULL) &&
          (delegate_info->encode != (char *) NULL)) ||
         ((encode != (const char *) NULL) &&
-         (delegate_info->decode != (char *) NULL)))
+       (delegate_info->decode != (char *) NULL))))
       {
         char
           *magick;
@@ -771,6 +773,13 @@
         /*
           Delegate requires a particular image format.
         */
+      if ((strpbrk(image_info->filename,ProhibitedAlphabet) != (char *) NULL) 
||
+          (strpbrk(image->filename,ProhibitedAlphabet) != (char *) NULL))
+        {
+          ThrowFileException(exception,FileOpenError,
+            "FilenameContainsProhibitedCharacters",image->filename);
+          return(MagickFalse);
+        }
         if (AcquireUniqueFilename(image_info->unique) == MagickFalse)
           {
             ThrowFileException(exception,FileOpenError,
@@ -850,18 +859,25 @@
   for (i=0; commands[i] != (char *) NULL; i++)
   {
     status=MagickFalse;
+    if ((strpbrk(image_info->filename,ProhibitedAlphabet) != (char *) NULL) ||
+        (strpbrk(image->filename,ProhibitedAlphabet) != (char *) NULL))
+      {
+        ThrowFileException(exception,FileOpenError,
+          "FilenameContainsProhibitedCharacters",image->filename);
+        break;
+      }
     if (AcquireUniqueFilename(image_info->unique) == MagickFalse)
       {
         ThrowFileException(exception,FileOpenError,
           "UnableToCreateTemporaryFile",image_info->unique);
-        return(MagickFalse);
+        break;
       }
     if (AcquireUniqueFilename(image_info->zero) == MagickFalse)
       {
         (void) RelinquishUniqueFileResource(image_info->unique);
         ThrowFileException(exception,FileOpenError,
           "UnableToCreateTemporaryFile",image_info->zero);
-        return(MagickFalse);
+        break;
       }
     command=TranslateText(image_info,image,commands[i]);
     if (command == (char *) NULL)

Reply via email to