/src/libvips/fuzz/thumbnail_fuzzer.cc
Line | Count | Source |
1 | | #include "config.h" |
2 | | |
3 | | #include <vips/vips.h> |
4 | | |
5 | | extern "C" int |
6 | | LLVMFuzzerInitialize(int *argc, char ***argv) |
7 | 37 | { |
8 | 37 | if (VIPS_INIT(*argv[0])) |
9 | 0 | return -1; |
10 | | |
11 | 37 | vips_concurrency_set(1); |
12 | 37 | return 0; |
13 | 37 | } |
14 | | |
15 | | extern "C" int |
16 | | LLVMFuzzerTestOneInput(const guint8 *data, size_t size) |
17 | 467k | { |
18 | 467k | VipsImage *image, *out; |
19 | 467k | double d; |
20 | | |
21 | 467k | if (!(image = vips_image_new_from_buffer(data, size, "", nullptr))) |
22 | 153k | return 0; |
23 | | |
24 | 314k | if (image->Xsize > 100 || |
25 | 302k | image->Ysize > 100 || |
26 | 297k | image->Bands > 4) { |
27 | 17.1k | g_object_unref(image); |
28 | 17.1k | return 0; |
29 | 17.1k | } |
30 | | |
31 | 297k | if (vips_thumbnail_image(image, &out, 42, nullptr)) { |
32 | 156k | g_object_unref(image); |
33 | 156k | return 0; |
34 | 156k | } |
35 | | |
36 | 141k | vips_avg(out, &d, nullptr); |
37 | | |
38 | 141k | g_object_unref(out); |
39 | 141k | g_object_unref(image); |
40 | | |
41 | 141k | return 0; |
42 | 297k | } |