summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Joye <pierre.php@gmail.com>2022-01-23 11:57:49 +0700
committerGitHub <noreply@github.com>2022-01-23 11:57:49 +0700
commit0956816bc63acadf6208cb1010807735ad6b0597 (patch)
treed4182ce254a70650ea506ebfca2997d4a92fab24
parent3f872fc931f17244aec542c9e0d6eb1a61bddf05 (diff)
downloadlibgd-0956816bc63acadf6208cb1010807735ad6b0597.tar.gz
#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)
-rw-r--r--src/gd_png.c3
-rw-r--r--tests/gd2/CMakeLists.txt1
-rw-r--r--tests/gd2/bug797.c32
-rw-r--r--tests/gd2/bug797.gd2bin0 -> 2321 bytes
-rw-r--r--tests/gdimagestringft/CMakeLists.txt6
5 files changed, 41 insertions, 1 deletions
diff --git a/src/gd_png.c b/src/gd_png.c
index a325e5c..4d8d49f 100644
--- a/src/gd_png.c
+++ b/src/gd_png.c
@@ -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);
diff --git a/tests/gd2/CMakeLists.txt b/tests/gd2/CMakeLists.txt
index cc188ca..0a9a157 100644
--- a/tests/gd2/CMakeLists.txt
+++ b/tests/gd2/CMakeLists.txt
@@ -6,6 +6,7 @@ LIST(APPEND TESTS_FILES
bug00309
bug00354
bug00383
+ bug797
createimagefromgd2part
createimagefromgd2partptr
gd2_empty_file
diff --git a/tests/gd2/bug797.c b/tests/gd2/bug797.c
new file mode 100644
index 0000000..89adedd
--- /dev/null
+++ b/tests/gd2/bug797.c
@@ -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();
+}
diff --git a/tests/gd2/bug797.gd2 b/tests/gd2/bug797.gd2
new file mode 100644
index 0000000..1b41762
--- /dev/null
+++ b/tests/gd2/bug797.gd2
Binary files differ
diff --git a/tests/gdimagestringft/CMakeLists.txt b/tests/gdimagestringft/CMakeLists.txt
index 42868a2..d1d8c61 100644
--- a/tests/gdimagestringft/CMakeLists.txt
+++ b/tests/gdimagestringft/CMakeLists.txt
@@ -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()