don't free() the same pointer twice if an error occurs during lines pointers allocation

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60875 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2009-06-02 13:50:30 +00:00
parent febd3dcaf8
commit 5550f66bce

View 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 );