Coverage Report

Created: 2025-01-28 06:40

/src/libvips/fuzz/jpegsave_file_fuzzer.cc
Line
Count
Source (jump to first uncovered line)
1
#include <vips/vips.h>
2
3
extern "C" int
4
LLVMFuzzerInitialize(int *argc, char ***argv)
5
33
{
6
33
  if (VIPS_INIT(*argv[0]))
7
0
    return -1;
8
9
33
  vips_concurrency_set(1);
10
33
  return 0;
11
33
}
12
13
static int
14
test_one_file(const char *name)
15
33.1k
{
16
33.1k
  VipsImage *image;
17
33.1k
  void *buf;
18
33.1k
  size_t len;
19
20
33.1k
  if (!(image = vips_image_new_from_file(name,
21
33.1k
        "access", VIPS_ACCESS_SEQUENTIAL,
22
33.1k
        nullptr)))
23
10.9k
    return 0;
24
25
22.1k
  if (image->Xsize > 100 ||
26
22.1k
    image->Ysize > 100 ||
27
22.1k
    image->Bands > 4) {
28
1.10k
    g_object_unref(image);
29
1.10k
    return 0;
30
1.10k
  }
31
32
21.0k
  if (vips_jpegsave_buffer(image, &buf, &len, nullptr)) {
33
12.7k
    g_object_unref(image);
34
12.7k
    return 0;
35
12.7k
  }
36
37
8.35k
  g_free(buf);
38
8.35k
  g_object_unref(image);
39
40
8.35k
  return 0;
41
21.0k
}
42
43
extern "C" int
44
LLVMFuzzerTestOneInput(const guint8 *data, size_t size)
45
33.1k
{
46
33.1k
  char *name;
47
48
33.1k
  if (!(name = vips__temp_name("%s")))
49
0
    return 0;
50
51
33.1k
  if (!g_file_set_contents(name, (const char *) data, size, nullptr) ||
52
33.1k
    test_one_file(name)) {
53
0
    g_unlink(name);
54
0
    g_free(name);
55
56
0
    return 0;
57
0
  }
58
59
33.1k
  g_unlink(name);
60
33.1k
  g_free(name);
61
62
33.1k
  return 0;
63
33.1k
}