Coverage Report

Created: 2026-08-11 06:46

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libvips/fuzz/generic_buffer_fuzzer.cc
Line
Count
Source
1
#include "config.h"
2
3
#include <vips/vips.h>
4
5
/*
6
#define DEBUG
7
 */
8
9
#ifndef SAVE_SUFFIX
10
#define SAVE_SUFFIX ".jpg"
11
#endif
12
13
extern "C" int
14
LLVMFuzzerInitialize(int *argc, char ***argv)
15
37
{
16
37
  if (VIPS_INIT(*argv[0]))
17
0
    return -1;
18
19
37
  vips_concurrency_set(1);
20
21
#ifdef DEBUG
22
  printf("available suffixes:\n");
23
  GSList *suffixes = nullptr;
24
  char **array = vips_foreign_get_suffixes();
25
  for (int i = 0; array[i] != nullptr; i++) {
26
    if (!g_slist_find_custom(suffixes, array[i],
27
      (GCompareFunc) g_strcmp0)) {
28
      printf("%s\n", array[i]);
29
      suffixes = g_slist_append(suffixes, g_strdup(array[i]));
30
    }
31
32
    g_free(array[i]);
33
  }
34
  g_free(array);
35
  g_slist_free_full(suffixes, g_free);
36
#endif
37
38
37
  return 0;
39
37
}
40
41
extern "C" int
42
LLVMFuzzerTestOneInput(const guint8 *data, size_t size)
43
467k
{
44
467k
  VipsImage *image;
45
467k
  void *buf;
46
467k
  size_t len;
47
48
467k
  if (!(image = vips_image_new_from_buffer(data, size, "", nullptr)))
49
153k
    return 0;
50
51
314k
  if (image->Xsize > 100 ||
52
302k
    image->Ysize > 100 ||
53
297k
    image->Bands > 4) {
54
17.1k
    g_object_unref(image);
55
17.1k
    return 0;
56
17.1k
  }
57
58
297k
  if (vips_image_write_to_buffer(image, SAVE_SUFFIX, &buf, &len, nullptr)) {
59
156k
    g_object_unref(image);
60
156k
    return 0;
61
156k
  }
62
63
141k
  g_free(buf);
64
141k
  g_object_unref(image);
65
66
141k
  return 0;
67
297k
}