From e4fb25bf636b0d4e2b3ba18b33d10008aa8af99d Mon Sep 17 00:00:00 2001 From: rmg-x Date: Sun, 8 Dec 2024 11:51:18 -0600 Subject: [PATCH] LibGfx: Redirect PNG errors and warnings to our own logging functions Before, libpng would use its own internal logging mechanism to print non-fatal errors and warnings to stdout/stderr. This made it confusing when trying to search the Ladybird codebase for those messages as they didn't exist. This commit uses `png_set_error_fn` from libpng to redirect those messages to our own custom logging functions instead. --- Libraries/LibGfx/ImageFormats/PNGLoader.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Libraries/LibGfx/ImageFormats/PNGLoader.cpp b/Libraries/LibGfx/ImageFormats/PNGLoader.cpp index c1901bab459..ae581d4dd00 100644 --- a/Libraries/LibGfx/ImageFormats/PNGLoader.cpp +++ b/Libraries/LibGfx/ImageFormats/PNGLoader.cpp @@ -82,6 +82,17 @@ ErrorOr> PNGImageDecoderPlugin::icc_data() return OptionalNone {}; } +static void log_png_error(png_structp png_ptr, char const* error_message) +{ + dbgln("libpng error: {}", error_message); + png_longjmp(png_ptr, 1); +} + +static void log_png_warning(png_structp, char const* warning_message) +{ + dbgln("libpng warning: {}", warning_message); +} + ErrorOr PNGImageDecoderPlugin::initialize() { png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr); @@ -109,6 +120,8 @@ ErrorOr PNGImageDecoderPlugin::initialize() *read_data = read_data->slice(length); }); + png_set_error_fn(png_ptr, nullptr, log_png_error, log_png_warning); + png_read_info(png_ptr, info_ptr); u32 width = 0;