Parcourir la source

LibGfx/PNG: Don't use a loop to read chunks in `decode_png_ihdr()`

This chunk is the first one, so we can remove that loop.
Lucas CHOLLET il y a 2 ans
Parent
commit
8d907b6535
1 fichiers modifiés avec 7 ajouts et 6 suppressions
  1. 7 6
      Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp

+ 7 - 6
Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp

@@ -614,14 +614,15 @@ static ErrorOr<void> decode_png_ihdr(PNGLoadingContext& context)
     size_t data_remaining = context.data_size - (context.data_current_ptr - context.data);
 
     Streamer streamer(context.data_current_ptr, data_remaining);
-    while (!streamer.at_end() && !context.has_seen_iend) {
-        TRY(process_chunk(streamer, context));
 
-        context.data_current_ptr = streamer.current_data_ptr();
+    // https://www.w3.org/TR/png/#11IHDR
+    // The IHDR chunk shall be the first chunk in the PNG datastream.
+    TRY(process_chunk(streamer, context));
 
-        if (context.state == PNGLoadingContext::State::IHDRDecoded)
-            return {};
-    }
+    context.data_current_ptr = streamer.current_data_ptr();
+
+    VERIFY(context.state == PNGLoadingContext::State::IHDRDecoded);
+    return {};
 }
 
 static bool decode_png_image_data_chunk(PNGLoadingContext& context)