Pārlūkot izejas kodu

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.
rmg-x 6 mēneši atpakaļ
vecāks
revīzija
e4fb25bf63
1 mainītis faili ar 13 papildinājumiem un 0 dzēšanām
  1. 13 0
      Libraries/LibGfx/ImageFormats/PNGLoader.cpp

+ 13 - 0
Libraries/LibGfx/ImageFormats/PNGLoader.cpp

@@ -82,6 +82,17 @@ ErrorOr<Optional<ReadonlyBytes>> 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<void> PNGImageDecoderPlugin::initialize()
 {
     png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
@@ -109,6 +120,8 @@ ErrorOr<void> 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;