]> granicus.if.org Git - imagemagick/commitdiff
Fixed memory leak.
authorDirk Lemstra <dirk@git.imagemagick.org>
Thu, 18 Jan 2018 19:46:10 +0000 (20:46 +0100)
committerDirk Lemstra <dirk@git.imagemagick.org>
Thu, 18 Jan 2018 19:46:10 +0000 (20:46 +0100)
Credit to OSS-Fuzz

coders/xcf.c

index 6dd43348d5ca1534046f1e0418fc88d646ec142f..ead1e6ed1d2d1aef7de368a3253612c1d3aa4d5b 100644 (file)
@@ -1341,11 +1341,13 @@ static Image *ReadXCFImage(const ImageInfo *image_info,ExceptionInfo *exception)
       */
       saved_pos=TellBlob(image);
       /* seek to the layer offset */
-      if (SeekBlob(image,offset,SEEK_SET) != offset)
-        ThrowReaderException(CorruptImageError,"NotEnoughPixelData");
-      /* read in the layer */
-      layer_ok=ReadOneLayer(image_info,image,&doc_info,
-        &layer_info[current_layer],current_layer,exception);
+      layer_ok=MagickFalse;
+      if (SeekBlob(image,offset,SEEK_SET) == offset)
+        {
+          /* read in the layer */
+          layer_ok=ReadOneLayer(image_info,image,&doc_info,
+            &layer_info[current_layer],current_layer,exception);
+        }
       if (layer_ok == MagickFalse)
         {
           ssize_t j;
@@ -1354,7 +1356,7 @@ static Image *ReadXCFImage(const ImageInfo *image_info,ExceptionInfo *exception)
             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");
+          ThrowReaderException(CorruptImageError,"NotEnoughPixelData");
         }
       /* restore the saved position so we'll be ready to
       *  read the next offset.