Coverage Report

Created: 2026-10-10 06:15

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/harfbuzz/test/fuzzing/hb-gpu-fuzzer.cc
Line
Count
Source
1
#include "hb-shape-input.hh"
2
3
#include <hb-gpu.h>
4
5
extern "C" int LLVMFuzzerTestOneInput (const uint8_t *data, size_t size)
6
20.8k
{
7
20.8k
  alloc_state = _fuzzing_alloc_state (data, size);
8
9
20.8k
  _fuzzing_shape_input_t input;
10
20.8k
  if (_fuzzing_prepare_shape_input (data, size, 30, 30, &input) == HB_FUZZING_SHAPE_INPUT_MALFORMED)
11
396
    return 0;
12
13
20.4k
  hb_gpu_draw_t *draw = hb_gpu_draw_create_or_fail ();
14
20.4k
  if (!draw)
15
151
    return 0;
16
20.2k
  hb_gpu_paint_t *paint = hb_gpu_paint_create_or_fail ();
17
20.2k
  if (!paint)
18
29
  {
19
29
    hb_gpu_draw_destroy (draw);
20
29
    return 0;
21
29
  }
22
23
20.2k
  unsigned glyph_count = hb_face_get_glyph_count (input.face);
24
20.2k
  unsigned limit = glyph_count > 16 ? 16 : glyph_count;
25
26
20.2k
  volatile unsigned counter = !glyph_count;
27
28
160k
  for (unsigned gid = 0; gid < limit; gid++)
29
139k
  {
30
139k
    hb_gpu_draw_reset (draw);
31
139k
    hb_gpu_draw_glyph (draw, input.font, gid);
32
33
139k
    hb_glyph_extents_t extents;
34
139k
    hb_blob_t *blob = hb_gpu_draw_encode (draw, &extents);
35
139k
    counter += extents.width;
36
139k
    if (blob)
37
137k
    {
38
137k
      unsigned length = 0;
39
137k
      const char *blob_data = hb_blob_get_data (blob, &length);
40
137k
      counter += length;
41
137k
      if (blob_data && length)
42
13.1k
  counter += (unsigned char) blob_data[0];
43
137k
      hb_gpu_draw_recycle_blob (draw, blob);
44
137k
    }
45
46
139k
    hb_gpu_paint_glyph (paint, input.font, gid);
47
139k
    hb_blob_t *paint_blob = hb_gpu_paint_encode (paint, &extents);
48
139k
    counter += extents.width;
49
139k
    if (paint_blob)
50
134k
    {
51
134k
      unsigned length = 0;
52
134k
      const char *blob_data = hb_blob_get_data (paint_blob, &length);
53
134k
      counter += length;
54
134k
      if (blob_data && length)
55
64.1k
  counter += (unsigned char) blob_data[0];
56
134k
      hb_gpu_paint_recycle_blob (paint, paint_blob);
57
134k
    }
58
139k
  }
59
60
20.2k
  hb_gpu_paint_destroy (paint);
61
20.2k
  hb_gpu_draw_destroy (draw);
62
20.2k
  return counter ? 0 : 0;
63
20.2k
}