#797 possible leak on png error, returns from setjmp lost the row_poi… (#802)

* #797 possible leak on png error, returns from setjmp lost the row_pointers ref somehow

* skip that one using mingw until we have a reliable portable FP related tests suites (may never happpen)
master
Pierre Joye 2022-01-23 11:57:49 +07:00 committed by GitHub
parent 3f872fc931
commit 0956816bc6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 1 deletions

View File

@ -1079,11 +1079,12 @@ static int _gdImagePngCtxEx(gdImagePtr im, gdIOCtx * outfile, int level)
}
png_write_image (png_ptr, row_pointers);
png_write_end (png_ptr, info_ptr);
for (j = 0; j < height; ++j)
gdFree (row_pointers[j]);
gdFree (row_pointers);
png_write_end (png_ptr, info_ptr);
} else {
png_write_image (png_ptr, im->pixels);
png_write_end (png_ptr, info_ptr);

View File

@ -6,6 +6,7 @@ LIST(APPEND TESTS_FILES
bug00309
bug00354
bug00383
bug797
createimagefromgd2part
createimagefromgd2partptr
gd2_empty_file

32
tests/gd2/bug797.c Normal file
View File

@ -0,0 +1,32 @@
/**
* Test that invalid transparent colors can't be read
*
* We're reading a corrupt palette image in GD2 format, which has only a single
* palette entry, but claims that the transparent color would be 1. We check
* that the transparency is simply ignored in this case.
*
* See also <https://github.com/libgd/libgd/issues/383>
*/
#include "gd.h"
#include "gdtest.h"
int main()
{
gdImagePtr im;
FILE *fp;
fp = gdTestFileOpen2("gd2", "bug797.gd2");
gdTestAssert(fp != NULL);
im = gdImageCreateFromGd2(fp);
gdTestAssert(im != NULL);
fclose(fp);
gdTestAssert(gdImageGetTransparent(im) == -1);
gdImageDestroy(im);
return gdNumFailures();
}

BIN
tests/gd2/bug797.gd2 Normal file

Binary file not shown.

View File

@ -1,8 +1,14 @@
IF(FREETYPE_FOUND)
LIST(APPEND TESTS_FILES
bug00615
)
IF (NOT MINGW)
LIST(APPEND TESTS_FILES
gdimagestringft_bbox
)
ENDIF(NOT MINGW)
ENDIF(FREETYPE_FOUND)
ADD_GD_TESTS()