]> granicus.if.org Git - imagemagick/commitdiff
https://github.com/ImageMagick/ImageMagick/issues/659
authorCristy <urban-warrior@imagemagick.org>
Tue, 8 Aug 2017 21:36:17 +0000 (17:36 -0400)
committerCristy <urban-warrior@imagemagick.org>
Tue, 8 Aug 2017 21:37:06 +0000 (17:37 -0400)
coders/xcf.c

index 1d838bd36749d41c6f55c3afc5a4b9669ddad50b..8f7a67e1f0ac1072e7219639e23406f609dcce5f 100644 (file)
@@ -781,6 +781,9 @@ static MagickBooleanType ReadOneLayer(const ImageInfo *image_info,Image* image,
   XCFDocInfo* inDocInfo,XCFLayerInfo *outLayer,const ssize_t layer,
   ExceptionInfo *exception)
 {
+  MagickBooleanType
+    status;
+
   MagickOffsetType
     offset;
 
@@ -914,6 +917,13 @@ static MagickBooleanType ReadOneLayer(const ImageInfo *image_info,Image* image,
     exception);
   if (outLayer->image == (Image *) NULL)
     return(MagickFalse);
+  status=SetImageExtent(outLayer->image,outLayer->image->columns,
+    outLayer->image->rows,exception);
+  if (status == MagickFalse)
+    {
+      outLayer->image=DestroyImageList(outLayer->image);
+      return(MagickFalse);
+    }
   /* clear the image based on the layer opacity */
   outLayer->image->background_color.alpha=
     ScaleCharToQuantum((unsigned char) outLayer->alpha);
@@ -1338,7 +1348,8 @@ static Image *ReadXCFImage(const ImageInfo *image_info,ExceptionInfo *exception)
           ssize_t j;
 
           for (j=0; j <= current_layer; j++)
-            layer_info[j].image=DestroyImage(layer_info[j].image);
+            if (layer_info[j].image != (Image *) NULL)
+              layer_info[j].image=DestroyImage(layer_info[j].image);
           layer_info=(XCFLayerInfo *) RelinquishMagickMemory(layer_info);
           ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
         }