/src/serenity/Meta/Lagom/Fuzzers/FuzzGIFLoader.cpp
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2020, the SerenityOS developers. |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #include <AK/Debug.h> |
8 | | #include <AK/Format.h> |
9 | | #include <LibGfx/ImageFormats/GIFLoader.h> |
10 | | #include <stddef.h> |
11 | | #include <stdint.h> |
12 | | |
13 | | extern "C" int LLVMFuzzerTestOneInput(uint8_t const* data, size_t size) |
14 | 867 | { |
15 | 867 | if constexpr (!GIF_DEBUG) { |
16 | 867 | AK::set_debug_enabled(false); |
17 | 867 | } |
18 | 867 | auto decoder_or_error = Gfx::GIFImageDecoderPlugin::create({ data, size }); |
19 | 867 | if (decoder_or_error.is_error()) |
20 | 26 | return 0; |
21 | 841 | auto decoder = decoder_or_error.release_value(); |
22 | 841 | auto& gif_decoder = *decoder; |
23 | 841 | auto bitmap_or_error = decoder->frame(0); |
24 | 841 | if (!bitmap_or_error.is_error()) { |
25 | 369 | auto const& bitmap = bitmap_or_error.value().image; |
26 | | // Looks like a valid GIF. Try to load the other frames: |
27 | 369 | dbgln_if(GIF_DEBUG, "bitmap size: {}", bitmap->size()); |
28 | 369 | dbgln_if(GIF_DEBUG, "codec size: {}", gif_decoder.size()); |
29 | 369 | dbgln_if(GIF_DEBUG, "is_animated: {}", gif_decoder.is_animated()); |
30 | 369 | dbgln_if(GIF_DEBUG, "loop_count: {}", gif_decoder.loop_count()); |
31 | 369 | dbgln_if(GIF_DEBUG, "frame_count: {}", gif_decoder.frame_count()); |
32 | 114k | for (size_t i = 0; i < gif_decoder.frame_count(); ++i) { |
33 | 113k | auto ifd_or_error = gif_decoder.frame(i); |
34 | 113k | if (ifd_or_error.is_error()) { |
35 | 102 | dbgln_if(GIF_DEBUG, "frame #{} error: {}", i, ifd_or_error.release_error()); |
36 | 113k | } else { |
37 | 113k | auto ifd = ifd_or_error.release_value(); |
38 | 113k | dbgln_if(GIF_DEBUG, "frame #{} size: {}", i, ifd.image->size()); |
39 | 113k | dbgln_if(GIF_DEBUG, "frame #{} duration: {}", i, ifd.duration); |
40 | 113k | } |
41 | 113k | } |
42 | 369 | dbgln_if(GIF_DEBUG, "Done."); |
43 | 369 | } |
44 | | |
45 | 841 | return 0; |
46 | 867 | } |