#include namespace { int on_frame_recv_callback(nghttp2_session *session, const nghttp2_frame *frame, void *user_data) { return 0; } } // namespace namespace { int on_begin_headers_callback(nghttp2_session *session, const nghttp2_frame *frame, void *user_data) { return 0; } } // namespace namespace { int on_header_callback2(nghttp2_session *session, const nghttp2_frame *frame, nghttp2_rcbuf *name, nghttp2_rcbuf *value, uint8_t flags, void *user_data) { return 0; } } // namespace namespace { int before_frame_send_callback(nghttp2_session *session, const nghttp2_frame *frame, void *user_data) { return 0; } } // namespace namespace { int on_frame_send_callback(nghttp2_session *session, const nghttp2_frame *frame, void *user_data) { return 0; } } // namespace namespace { void send_pending(nghttp2_session *session) { for (;;) { const uint8_t *data; auto n = nghttp2_session_mem_send(session, &data); if (n == 0) { return; } } } } // namespace extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { nghttp2_session *session; nghttp2_session_callbacks *callbacks; nghttp2_session_callbacks_new(&callbacks); nghttp2_session_callbacks_set_on_frame_recv_callback(callbacks, on_frame_recv_callback); nghttp2_session_callbacks_set_on_begin_headers_callback( callbacks, on_begin_headers_callback); nghttp2_session_callbacks_set_on_header_callback2(callbacks, on_header_callback2); nghttp2_session_callbacks_set_before_frame_send_callback( callbacks, before_frame_send_callback); nghttp2_session_callbacks_set_on_frame_send_callback(callbacks, on_frame_send_callback); nghttp2_session_server_new(&session, callbacks, nullptr); nghttp2_session_callbacks_del(callbacks); nghttp2_settings_entry iv{NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100}; nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, &iv, 1); send_pending(session); nghttp2_session_mem_recv(session, data, size); send_pending(session); nghttp2_session_del(session); return 0; }