]> git.saurik.com Git - wxWidgets.git/commitdiff
don't free() the same pointer twice if an error occurs during lines pointers allocation
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 2 Jun 2009 13:50:30 +0000 (13:50 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 2 Jun 2009 13:50:30 +0000 (13:50 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60875 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/imagpng.cpp

index 528168a609cf1d23eac9bc8f24bb07c8c3ef21b6..33c53657d8ddf51a893a15bffa7bc40be6863e01 100644 (file)
@@ -558,18 +558,16 @@ wxPNGHandler::LoadFile(wxImage *image,
     if (!image->Ok())
         goto error;
 
-    lines = (unsigned char **)malloc( (size_t)(height * sizeof(unsigned char *)) );
+    // initialize all line pointers to NULL to ensure that they can be safely
+    // free()d if an error occurs before all of them could be allocated
+    lines = (unsigned char **)calloc(height, sizeof(unsigned char *));
     if ( !lines )
         goto error;
 
     for (i = 0; i < height; i++)
     {
         if ((lines[i] = (unsigned char *)malloc( (size_t)(width * (sizeof(unsigned char) * 4)))) == NULL)
-        {
-            for ( unsigned int n = 0; n < i; n++ )
-                free( lines[n] );
             goto error;
-        }
     }
 
     png_read_image( png_ptr, lines );