diff --git a/ext/gd/libgd/gd_png.c b/ext/gd/libgd/gd_png.c index 996e86ae754f..952d65240db1 100644 --- a/ext/gd/libgd/gd_png.c +++ b/ext/gd/libgd/gd_png.c @@ -71,6 +71,11 @@ static void gdPngErrorHandler (png_structp png_ptr, png_const_charp msg) longjmp (jmpbuf_ptr->jmpbuf, 1); } + +static void gdPngWarningHandler (png_structp png_ptr, png_const_charp msg) +{ + gd_error_ex(GD_WARNING, "gd-png: libpng warning: %s", msg); +} #endif static void gdPngReadData (png_structp png_ptr, png_bytep data, png_size_t length) @@ -152,7 +157,7 @@ gdImagePtr gdImageCreateFromPngCtx (gdIOCtx * infile) } #ifdef PNG_SETJMP_SUPPORTED - png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, &jbw, gdPngErrorHandler, NULL); + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, &jbw, gdPngErrorHandler, gdPngWarningHandler); #else png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); #endif @@ -494,7 +499,7 @@ void gdImagePngCtxEx (gdImagePtr im, gdIOCtx * outfile, int level, int basefilte #ifdef PNG_SETJMP_SUPPORTED jmpbuf_wrapper jbw; - png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, &jbw, gdPngErrorHandler, NULL); + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, &jbw, gdPngErrorHandler, gdPngWarningHandler); #else png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); #endif diff --git a/ext/gd/tests/bug71316.phpt b/ext/gd/tests/bug71316.phpt new file mode 100644 index 000000000000..78e9f9094db0 --- /dev/null +++ b/ext/gd/tests/bug71316.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #71316 (libpng warning from imagecreatefromstring) +--SKIPIF-- + 2.3.3"); +} +?> +--FILE-- + +--EXPECTF-- +resource(%d) of type (gd) diff --git a/ext/gd/tests/bug71316.png b/ext/gd/tests/bug71316.png new file mode 100644 index 000000000000..9b897c0371f0 Binary files /dev/null and b/ext/gd/tests/bug71316.png differ