]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Fri, 18 Mar 2011 13:25:59 +0000 (13:25 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Fri, 18 Mar 2011 13:25:59 +0000 (13:25 +0000)
ChangeLog
coders/pdf.c
coders/psd.c

index 629f739913cdf95b0ebfaa20b385726a4326ae60..31522be080e9092f730c8a8d9a74e87c73d064b2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,10 @@
+2011-03-14  6.6.8-6 Cristy  <quetzlzacatenango@image...>
+  * Fixed memory leak for PDF and Bitmap PSD RLE support (reference
+    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=18317).
 
 2011-03-17 6.6.8-5 Anthony Thyssen <A.Thyssen@griffith...>
   * Replaced Minus and Divide Composition methods with Dst and Src
-    equivelents. Now users can decide how these non-commutative mathematical
+    equivalents. Now users can decide how these non-commutative mathematical
     operators are applied the to the images being composited.
 
 2011-03-17 6.6.8-5 Anthony Thyssen <A.Thyssen@griffith...>
index fcb993e3f12ef12030f5d4e67b19dc75d3677a8b..1d53491d2d848127c7402ae908aea2e85cb06a16 100644 (file)
@@ -661,6 +661,7 @@ static Image *ReadPDFImage(const ImageInfo *image_info,ExceptionInfo *exception)
     {
       ThrowFileException(exception,DelegateError,"PostscriptDelegateFailed",
         image_info->filename);
+      image=DestroyImage(image);
       return((Image *) NULL);
     }
   if (LocaleCompare(pdf_image->magick,"BMP") == 0)
index ac8b1eead459e53ea97095fc9eace571c9c5e5da..412ee8b031a8cc6fe238b680507a0cb8a9a8ad9a 100644 (file)
@@ -589,7 +589,16 @@ static MagickBooleanType ReadPSDLayer(Image *image,const size_t channels,
   {
     if (image->depth == 1)
       {
-        count=ReadBlob(image,(image->columns+7)/8,pixels);
+        if (image->compression != RLECompression)
+          count=ReadBlob(image,(image->columns+7)/8,pixels);
+        else
+          {
+            count=ReadBlob(image,(size_t) offsets[y],compact_pixels);
+            if (count != (ssize_t) offsets[y])
+              break;
+            count=DecodePSDPixels((size_t) offsets[y],compact_pixels,
+              (ssize_t) 123456,(size_t) ((image->columns+7)/8),pixels);
+          }
         if (count < (ssize_t) ((image->columns+7)/8))
           break;
       }
@@ -649,9 +658,13 @@ static MagickBooleanType ReadPSDLayer(Image *image,const size_t channels,
               if (image->depth == 1)
                 {
                   ssize_t
-                    bit;
+                    bit,
+                    number_bits;
 
-                  for (bit=0; bit < (ssize_t) (image->columns % 8); bit++)
+                  number_bits=image->columns-x;
+                  if (number_bits > 8)
+                    number_bits=8;
+                  for (bit=0; bit < number_bits; bit++)
                   {
                     indexes[x]=((((unsigned char) pixel) & (0x01 << (7-bit)))
                       != 0 ? 0 : 255);