Coverage Report

Created: 2026-07-26 07:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libvips/fuzz/jpegsave_file_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
static int
16
test_one_file(const char *name)
17
43.2k
{
18
43.2k
  VipsImage *image;
19
43.2k
  void *buf;
20
43.2k
  size_t len;
21
22
43.2k
  if (!(image = vips_image_new_from_file(name,
23
43.2k
        "access", VIPS_ACCESS_SEQUENTIAL,
24
43.2k
        nullptr)))
25
13.6k
    return 0;
26
27
29.5k
  if (image->Xsize > 100 ||
28
28.7k
    image->Ysize > 100 ||
29
28.2k
    image->Bands > 4) {
30
1.33k
    g_object_unref(image);
31
1.33k
    return 0;
32
1.33k
  }
33
34
28.2k
  if (vips_jpegsave_buffer(image, &buf, &len, nullptr)) {
35
19.0k
    g_object_unref(image);
36
19.0k
    return 0;
37
19.0k
  }
38
39
9.16k
  g_free(buf);
40
9.16k
  g_object_unref(image);
41
42
9.16k
  return 0;
43
28.2k
}
44
45
extern "C" int
46
LLVMFuzzerTestOneInput(const guint8 *data, size_t size)
47
43.2k
{
48
43.2k
  char *name;
49
50
43.2k
  if (!(name = vips__temp_name("%s")))
51
0
    return 0;
52
53
43.2k
  if (!g_file_set_contents(name, (const char *) data, size, nullptr) ||
54
43.2k
    test_one_file(name)) {
55
0
    g_unlink(name);
56
0
    g_free(name);
57
58
0
    return 0;
59
0
  }
60
61
43.2k
  g_unlink(name);
62
43.2k
  g_free(name);
63
64
43.2k
  return 0;
65
43.2k
}