ソースを参照

Lagom: Make BMP fuzzer look like the other image loader fuzzers

Nico Weber 4 年 前
コミット
ec4c2f971b

+ 8 - 0
Libraries/LibGfx/BMPLoader.cpp

@@ -186,6 +186,14 @@ RefPtr<Gfx::Bitmap> load_bmp(const StringView& path)
     return bitmap;
 }
 
+RefPtr<Gfx::Bitmap> load_bmp_from_memory(const u8* data, size_t length)
+{
+    auto bitmap = load_bmp_impl(data, length);
+    if (bitmap)
+        bitmap->set_mmap_name(String::format("Gfx::Bitmap [%dx%d] - Decoded BMP: <memory>", bitmap->width(), bitmap->height()));
+    return bitmap;
+}
+
 static const LogStream& operator<<(const LogStream& out, Endpoint<i32> ep)
 {
     return out << "(" << ep.x << ", " << ep.y << ", " << ep.z << ")";

+ 1 - 1
Libraries/LibGfx/BMPLoader.h

@@ -26,13 +26,13 @@
 
 #pragma once
 
-#include <AK/Vector.h>
 #include <LibGfx/Bitmap.h>
 #include <LibGfx/ImageDecoder.h>
 
 namespace Gfx {
 
 RefPtr<Gfx::Bitmap> load_bmp(const StringView& path);
+RefPtr<Gfx::Bitmap> load_bmp_from_memory(const u8*, size_t);
 
 struct BMPLoadingContext;
 

+ 1 - 8
Meta/Lagom/Fuzzers/FuzzBMP.cpp

@@ -29,13 +29,6 @@
 
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
 {
-    Gfx::BMPImageDecoderPlugin loader { data, size };
-    auto bitmap = loader.bitmap();
-    if (!bitmap)
-        return 1;
-    if (bitmap->width() >= 100000 || bitmap->height() >= 100000) {
-        fprintf(stderr, "Silly bitmap: %dx%d pixels?!\n", bitmap->width(), bitmap->height());
-        ASSERT_NOT_REACHED();
-    }
+    Gfx::load_bmp_from_memory(data, size);
     return 0;
 }