summaryrefslogtreecommitdiff
path: root/tests/png
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2016-11-16 18:10:29 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2016-11-16 18:10:29 +0100
commitfea55903eeeb89d4a0117519f8c1d039adc95da5 (patch)
tree23fece8c3691331b5b6f1918b718319970e5ebcf /tests/png
parent5ebbd50cffc013a7dd0f3b1eaaa83d199e8e47fd (diff)
downloadlibgd-fea55903eeeb89d4a0117519f8c1d039adc95da5.tar.gz
Fix #338: Fatal and normal libjpeg/ibpng errors not distinguishable
libgd clients need to be able to distinguish between fatal and "extremely fatal" libjpeg and libpng errors, because in the former case execution can proceed, but in the latter case libgd calls exit(). Therefore we report fatal errors as GD_WARNING.
Diffstat (limited to 'tests/png')
-rw-r--r--tests/png/.gitignore1
-rw-r--r--tests/png/CMakeLists.txt1
-rw-r--r--tests/png/Makemodule.am1
-rw-r--r--tests/png/bug00338.c48
4 files changed, 51 insertions, 0 deletions
diff --git a/tests/png/.gitignore b/tests/png/.gitignore
index 28eb412..97972c1 100644
--- a/tests/png/.gitignore
+++ b/tests/png/.gitignore
@@ -3,6 +3,7 @@
/bug00086
/bug00088
/bug00193
+/bug00338
/png_im2im
/png_null
/png_resolution
diff --git a/tests/png/CMakeLists.txt b/tests/png/CMakeLists.txt
index 228474e..a577a67 100644
--- a/tests/png/CMakeLists.txt
+++ b/tests/png/CMakeLists.txt
@@ -8,6 +8,7 @@ LIST(APPEND TESTS_FILES
bug00086
bug00088
bug00193
+ bug00338
)
ENDIF(PNG_FOUND)
diff --git a/tests/png/Makemodule.am b/tests/png/Makemodule.am
index 01c4803..7e73dd6 100644
--- a/tests/png/Makemodule.am
+++ b/tests/png/Makemodule.am
@@ -5,6 +5,7 @@ libgd_test_programs += \
png/bug00086 \
png/bug00088 \
png/bug00193 \
+ png/bug00338 \
png/png_im2im \
png/png_null \
png/png_resolution
diff --git a/tests/png/bug00338.c b/tests/png/bug00338.c
new file mode 100644
index 0000000..af16df1
--- /dev/null
+++ b/tests/png/bug00338.c
@@ -0,0 +1,48 @@
+/**
+ * Regression test for <https://github.com/libgd/libgd/issues/338>
+ *
+ * We're testing that writing a PNG image with an unsupported quality
+ * raises a GD_WARNING for the fatal libpng error, but not a GD_ERROR.
+ * We also make sure, that the fatal libpng error is actually reported.
+ *
+ * See also ../jpeg/bug00338.c
+ */
+
+
+#include <string.h>
+#include "gd.h"
+#include "gd_errors.h"
+#include "gdtest.h"
+
+
+#define MSG "gd-png: fatal libpng error: %s\n"
+
+
+static int error_handler_called = 0;
+
+
+static void error_handler(int priority, const char *format, va_list args)
+{
+ if (!strcmp(format, MSG)) {
+ gdTestAssertMsg(priority == GD_WARNING, "expected priority %d, but got %d", GD_WARNING, priority);
+ error_handler_called = 1;
+ }
+}
+
+
+int main()
+{
+ gdImagePtr im;
+ FILE *fp;
+
+ gdSetErrorMethod(error_handler);
+
+ im = gdImageCreateTrueColor(10, 10);
+ fp = gdTestTempFp();
+ gdImagePngEx(im, fp, 100);
+ gdImageDestroy(im);
+
+ gdTestAssert(error_handler_called);
+
+ return gdNumFailures();
+}