Coverage Report

Created: 2026-10-28 06:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/nghttp2/fuzz/fuzz_target.cc
Line
Count
Source
1
#include <nghttp2/nghttp2.h>
2
3
namespace {
4
int on_frame_recv_callback(nghttp2_session *session, const nghttp2_frame *frame,
5
12.9k
                           void *user_data) {
6
12.9k
  return 0;
7
12.9k
}
8
} // namespace
9
10
namespace {
11
int on_begin_headers_callback(nghttp2_session *session,
12
17.1k
                              const nghttp2_frame *frame, void *user_data) {
13
17.1k
  return 0;
14
17.1k
}
15
} // namespace
16
17
namespace {
18
int on_header_callback2(nghttp2_session *session, const nghttp2_frame *frame,
19
                        nghttp2_rcbuf *name, nghttp2_rcbuf *value,
20
30.2k
                        uint8_t flags, void *user_data) {
21
30.2k
  return 0;
22
30.2k
}
23
} // namespace
24
25
namespace {
26
int before_frame_send_callback(nghttp2_session *session,
27
30.7k
                               const nghttp2_frame *frame, void *user_data) {
28
30.7k
  return 0;
29
30.7k
}
30
} // namespace
31
32
namespace {
33
int on_frame_send_callback(nghttp2_session *session, const nghttp2_frame *frame,
34
30.7k
                           void *user_data) {
35
30.7k
  return 0;
36
30.7k
}
37
} // namespace
38
39
namespace {
40
17.3k
void send_pending(nghttp2_session *session) {
41
48.1k
  for (;;) {
42
48.1k
    const uint8_t *data;
43
48.1k
    auto n = nghttp2_session_mem_send2(session, &data);
44
48.1k
    if (n == 0) {
45
17.3k
      return;
46
17.3k
    }
47
48.1k
  }
48
17.3k
}
49
} // namespace
50
51
11.1k
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
52
11.1k
  nghttp2_session *session;
53
11.1k
  nghttp2_session_callbacks *callbacks;
54
55
11.1k
  nghttp2_session_callbacks_new(&callbacks);
56
11.1k
  nghttp2_session_callbacks_set_on_frame_recv_callback(callbacks,
57
11.1k
                                                       on_frame_recv_callback);
58
11.1k
  nghttp2_session_callbacks_set_on_begin_headers_callback(
59
11.1k
    callbacks, on_begin_headers_callback);
60
11.1k
  nghttp2_session_callbacks_set_on_header_callback2(callbacks,
61
11.1k
                                                    on_header_callback2);
62
11.1k
  nghttp2_session_callbacks_set_before_frame_send_callback(
63
11.1k
    callbacks, before_frame_send_callback);
64
11.1k
  nghttp2_session_callbacks_set_on_frame_send_callback(callbacks,
65
11.1k
                                                       on_frame_send_callback);
66
67
11.1k
  nghttp2_session_server_new(&session, callbacks, nullptr);
68
11.1k
  nghttp2_session_callbacks_del(callbacks);
69
70
11.1k
  nghttp2_settings_entry iv{NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100};
71
11.1k
  nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1);
72
11.1k
  send_pending(session);
73
11.1k
  nghttp2_session_mem_recv2(session, data, size);
74
11.1k
  send_pending(session);
75
76
11.1k
  nghttp2_session_del(session);
77
78
11.1k
  return 0;
79
11.1k
}