aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Arias Mallo <rodarima@gmail.com>2024-06-01 21:33:58 +0200
committerRodrigo Arias Mallo <rodarima@gmail.com>2024-06-01 21:40:51 +0200
commitf02cc54c84efcea6ee4c65b64853d8c5671090e9 (patch)
tree8c9454833a39beccb4adfe926720fdd84ced4d6f
parentc96cd51fe73fddb4e9188e4f857938d33f386664 (diff)
Handle PNG warnings as non-fatal
The libpng library may emit warnings when decoding a PNG image, which are non-fatal. So far we were handling them as errors and stopping the decoding process, which prevents Dillo from decoding some images. In particular, images that emit the warning: > iCCP: known incorrect sRGB profile Fixes: https://github.com/dillo-browser/dillo/issues/179 Authored-by: dogma
-rw-r--r--ChangeLog2
-rw-r--r--src/png.c11
2 files changed, 12 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index f073f389..f2a25047 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -16,6 +16,8 @@ dillo-3.1.1 [not released yet]
Patches: Rodrigo Arias Mallo <rodarima@gmail.com>
+- Add HTML tests to the distributed tarball.
Patches: Matt Jolly
++- Gracefully handle warnings from PNG images.
+ Patches: dogma
dillo-3.1.0 [May 4, 2024]
diff --git a/src/png.c b/src/png.c
index fdee20cc..ae3d9f82 100644
--- a/src/png.c
+++ b/src/png.c
@@ -114,6 +114,15 @@ void Png_error_handling(png_structp png_ptr, png_const_charp msg)
longjmp(png->jmpbuf, 1);
}
+static
+void Png_warning_handler(png_structp png_ptr, png_const_charp msg)
+{
+ DilloPng *png;
+
+ png = png_get_error_ptr(png_ptr);
+ MSG_WARN("Png warning: %s in %s\n", msg, URL_STR(png->url));
+}
+
static void
Png_datainfo_callback(png_structp png_ptr, png_infop info_ptr)
{
@@ -354,7 +363,7 @@ static void Png_write(DilloPng *png, void *Buf, uint_t BufSize)
PNG_LIBPNG_VER_STRING,
png,
(png_error_ptr)Png_error_handling,
- (png_error_ptr)Png_error_handling);
+ (png_error_ptr)Png_warning_handler);
dReturn_if_fail (png->png_ptr != NULL);
png->info_ptr = png_create_info_struct(png->png_ptr);
dReturn_if_fail (png->info_ptr != NULL);