/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 | 36 | { |
8 | 36 | if (VIPS_INIT(*argv[0])) |
9 | 0 | return -1; |
10 | | |
11 | 36 | vips_concurrency_set(1); |
12 | 36 | return 0; |
13 | 36 | } |
14 | | |
15 | | extern "C" int |
16 | | LLVMFuzzerTestOneInput(const guint8 *data, size_t size) |
17 | 466k | { |
18 | 466k | VipsImage *image, *out; |
19 | 466k | double d; |
20 | | |
21 | 466k | if (!(image = vips_image_new_from_buffer(data, size, "", nullptr))) |
22 | 154k | return 0; |
23 | | |
24 | 312k | if (image->Xsize > 100 || |
25 | 300k | image->Ysize > 100 || |
26 | 295k | image->Bands > 4) { |
27 | 17.1k | g_object_unref(image); |
28 | 17.1k | return 0; |
29 | 17.1k | } |
30 | | |
31 | 295k | if (vips_thumbnail_image(image, &out, 42, nullptr)) { |
32 | 158k | g_object_unref(image); |
33 | 158k | return 0; |
34 | 158k | } |
35 | | |
36 | 136k | vips_avg(out, &d, nullptr); |
37 | | |
38 | 136k | g_object_unref(out); |
39 | 136k | g_object_unref(image); |
40 | | |
41 | 136k | return 0; |
42 | 295k | } |