Fuzz introspector
For issues and ideas: https://github.com/ossf/fuzz-introspector/issues

Project functions overview

The following table shows data about each function in the project. The functions included in this table correspond to all functions that exist in the executables of the fuzzers. As such, there may be functions that are from third-party libraries.

For further technical details on the meaning of columns in the below table, please see the Glossary .

Func name Functions filename Args Function call depth Reached by Fuzzers Runtime reached by Fuzzers Combined reached by Fuzzers Fuzzers runtime hit Func lines hit % I Count BB Count Cyclomatic complexity Functions reached Reached by functions Accumulated cyclomatic complexity Undiscovered complexity

Fuzzer details

Fuzzer: fuzz_crypto_ext

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 0 0.0%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 15 100.%
All colors 15 100

Runtime coverage analysis

Covered functions
11
Functions that are reachable but not covered
4
Reachable functions
17
Percentage of reachable functions covered
76.47%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/fuzz_crypto_ext.cpp 3
/src/mhd2/src/mhd2/md5_ext.c 4
/src/mhd2/src/mhd2/sha256_ext.c 4

Fuzzer: fuzz_libinfo

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 7 16.6%
gold [1:9] 12 28.5%
yellow [10:29] 17 40.4%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 6 14.2%
All colors 42 100

Fuzz blockers

The following nodes represent call sites where fuzz blockers occur.

Amount of callsites blocked Calltree index Parent function Callsite Largest blocked function
4 28 mhd_lib_init_global_if_needed call site: 00028 fprintf
3 13 mhd_mclock_init_once call site: 00013 clock_gettime

Runtime coverage analysis

Covered functions
18
Functions that are reachable but not covered
13
Reachable functions
31
Percentage of reachable functions covered
58.06%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/fuzz_libinfo.cpp 1
/src/mhd2/src/mhd2/lib_get_info.c 2
/src/mhd2/src/mhd2/mhd_lib_init.c 8
/src/mhd2/src/mhd2/mhd_panic.c 2
/src/mhd2/src/mhd2/mhd_mono_clock.c 1
/src/mhd2/src/mhd2/mhd_send.c 2
/src/mhd2/src/mhd2/tls_gnu_funcs.c 3

Fuzzer: fuzz_str

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 9 10.5%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 76 89.4%
All colors 85 100

Fuzz blockers

The following nodes represent call sites where fuzz blockers occur.

Amount of callsites blocked Calltree index Parent function Callsite Largest blocked function
2 48 mhd_str_pct_decode_strict_n call site: 00048 xdigittovalue
2 53 mhd_str_pct_decode_lenient_n call site: 00053 xdigittovalue
1 2 fuzz_tokens(FuzzedDataProvider&) call site: 00002 charsequalcaseless
1 5 fuzz_tokens(FuzzedDataProvider&) call site: 00005 charsequalcaseless
1 9 fuzz_tokens(FuzzedDataProvider&) call site: 00009 charsequalcaseless
1 14 fuzz_tokens(FuzzedDataProvider&) call site: 00014 mhd_str_equal_caseless_bin_n
1 64 fuzz_quoted(FuzzedDataProvider&) call site: 00064 charsequalcaseless

Runtime coverage analysis

Covered functions
37
Functions that are reachable but not covered
9
Reachable functions
53
Percentage of reachable functions covered
83.02%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/fuzz_str.cpp 8
/src/mhd2/src/mhd2/mhd_str.c 35

Fuzzer: fuzz_response

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 15 9.74%
gold [1:9] 1 0.64%
yellow [10:29] 4 2.59%
greenyellow [30:49] 5 3.24%
lawngreen 50+ 129 83.7%
All colors 154 100

Fuzz blockers

The following nodes represent call sites where fuzz blockers occur.

Amount of callsites blocked Calltree index Parent function Callsite Largest blocked function
6 41 response_add_header_int call site: 00041 mhd_panic
3 150 mhd_response_deinit_content_data call site: 00150 mhd_response_dec_use_count
2 57 MHD_response_set_options call site: 00057 mhd_panic
1 29 add_headers(FuzzedDataProvider&, MHD_Response*) call site: 00029 pthread_mutex_lock
1 61 response_make_reusable call site: 00061 pthread_mutex_destroy
1 120 response_add_auth_digest_challenge_int call site: 00120 mhd_response_remove_auth_digest_headers
1 141 LLVMFuzzerTestOneInput call site: 00141 mhd_panic

Runtime coverage analysis

Covered functions
41
Functions that are reachable but not covered
21
Reachable functions
77
Percentage of reachable functions covered
72.73%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/fuzz_response.cpp 7
/src/mhd2/src/mhd2/response_from.c 8
/src/mhd2/src/mhd2/response_add_header.c 5
/src/mhd2/src/mhd2/mhd_panic.c 1
/src/mhd_helper.cpp 2
/src/mhd2/src/include/microhttpd2_generated_response_options.h 8
/src/mhd2/src/mhd2/response_set_options.c 1
/src/mhd2/src/mhd2/response_funcs.c 2
/src/mhd2/src/mhd2/response_auth_basic.c 2
/src/mhd2/src/mhd2/mhd_str.c 1
/src/mhd2/src/mhd2/response_auth_digest.c 4
/src/mhd2/src/mhd2/http_status_str.c 1
/src/mhd2/src/mhd2/response_destroy.c 3

Fuzzer: fuzz_mhd2

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 158 56.0%
gold [1:9] 11 3.90%
yellow [10:29] 1 0.35%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 112 39.7%
All colors 282 100

Fuzz blockers

The following nodes represent call sites where fuzz blockers occur.

Amount of callsites blocked Calltree index Parent function Callsite Largest blocked function
82 191 MHD_daemon_destroy call site: 00191 daemon_close_connections
34 4 fuzz_digest_auth_calc(FuzzedDataProvider&) call site: 00004 calc_userhash
14 45 fuzz_digest_auth_calc(FuzzedDataProvider&) call site: 00045 calc_userdigest
6 80 response_add_header_int call site: 00080 mhd_panic
5 39 fuzz_digest_auth_calc(FuzzedDataProvider&) call site: 00039 MHD_digest_auth_calc_userhash
3 125 mhd_response_deinit_content_data call site: 00125 mhd_response_dec_use_count
3 149 mhd_mclock_init_once call site: 00149 clock_gettime
3 168 daemon_configuration(FuzzedDataProvider&, MHD_Daemon*) call site: 00168 strlen
2 94 MHD_response_set_options call site: 00094 mhd_panic
1 68 fuzz_response_config(FuzzedDataProvider&, MHD_Response*) call site: 00068 pthread_mutex_lock
1 98 response_make_reusable call site: 00098 pthread_mutex_destroy
1 116 fuzz_response_config(FuzzedDataProvider&, MHD_Response*) call site: 00116 mhd_panic

Runtime coverage analysis

Covered functions
56
Functions that are reachable but not covered
108
Reachable functions
179
Percentage of reachable functions covered
39.66%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/fuzz_mhd2.cpp 8
/src/mhd2/src/mhd2/auth_digest.c 14
/src/mhd2/src/mhd2/md5_int.c 4
/src/mhd2/src/mhd2/sha256_int.c 4
/src/mhd2/src/mhd2/sha512_256_int.c 4
/src/mhd2/src/mhd2/./mhd_bithelpers.h 2
/src/mhd2/src/mhd2/mhd_str.c 3
/src/mhd2/src/mhd2/response_from.c 5
/src/mhd2/src/mhd2/response_add_header.c 5
/src/mhd2/src/mhd2/mhd_panic.c 2
/src/mhd2/src/include/microhttpd2_generated_response_options.h 4
/src/mhd2/src/mhd2/response_set_options.c 1
/src/mhd2/src/mhd2/response_funcs.c 2
/src/mhd2/src/mhd2/response_destroy.c 3
/src/mhd2/src/mhd2/response_auth_digest.c 1
/src/mhd2/src/mhd2/daemon_create.c 1
/src/mhd2/src/mhd2/mhd_lib_init.c 6
/src/mhd2/src/mhd2/mhd_mono_clock.c 1
/src/mhd2/src/mhd2/mhd_send.c 2
/src/mhd2/src/mhd2/tls_gnu_funcs.c 8
/src/mhd2/src/include/microhttpd2_generated_daemon_options.h 7
/src/mhd2/src/mhd2/daemon_set_options.c 1
/src/mhd2/src/mhd2/daemon_get_info.c 2
/src/mhd2/src/mhd2/events_process.c 2
/src/mhd2/src/mhd2/daemon_start.c 18
/src/mhd2/src/mhd2/daemon_funcs.c 4
/src/mhd2/src/mhd2/daemon_logger.c 1
/src/mhd2/src/mhd2/upgrade_proc.c 1
/src/mhd2/src/mhd2/stream_funcs.c 4
/src/mhd2/src/mhd2/mhd_sockets_funcs.c 2
/src/mhd2/src/mhd2/./conn_mark_ready.h 1
/src/mhd2/src/mhd2/stream_process_reply.c 1
/src/mhd2/src/mhd2/extr_events_funcs.c 1
/src/mhd2/src/mhd2/mempool_funcs.c 1
/src/mhd2/src/mhd2/daemon_add_conn.c 2

Fuzzer: fuzz_daemon_connection

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 270 70.3%
gold [1:9] 105 27.3%
yellow [10:29] 6 1.56%
greenyellow [30:49] 2 0.52%
lawngreen 50+ 1 0.26%
All colors 384 100

Fuzz blockers

The following nodes represent call sites where fuzz blockers occur.

Amount of callsites blocked Calltree index Parent function Callsite Largest blocked function
56 223 mhd_daemon_claim_lbuf_up_to call site: 00223 parse_post_mpart
39 291 prepare_body_and_process(MHD_Connection&, std::__1::basic_string , std::__1::allocator >&, unsigned long, bool) call site: 00291 mhd_stream_process_request_body
24 162 mhd_stream_parse_request_headers call site: 00162 handle_req_cookie_no_space
22 105 parse_http_std_method call site: 00105 process_request_target
18 192 detect_post_enc call site: 00192 detect_mpart_boundary_from_the_header
18 347 mhd_stream_process_req_recv_finished call site: 00347 mhd_conn_tls_check
15 331 LLVMFuzzerTestOneInput call site: 00331 mhd_stream_call_app_request_cb
8 88 get_request_line_inner call site: 00088 parse_http_version
6 128 mhd_str_equal_caseless_bin_n call site: 00128 respond_with_error_len
5 52 mhd_socket_set_hard_close call site: 00052 mhd_tls_gnu_conn_shutdown
5 151 mhd_stream_parse_request_headers call site: 00151 respond_with_error_len
5 368 mhd_connection_set_nodelay_state call site: 00368 mhd_connection_set_cork_state

Runtime coverage analysis

Covered functions
64
Functions that are reachable but not covered
87
Reachable functions
162
Percentage of reachable functions covered
46.3%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/fuzz_daemon_connection.cpp 1
/src/mhd2/src/mhd2/mempool_funcs.c 7
/src/connection_helper.cpp 16
/src/mhd2/src/mhd2/stream_funcs.c 7
/src/mhd2/src/mhd2/request_funcs.c 2
/src/mhd2/src/mhd2/stream_process_request.c 22
/src/mhd2/src/mhd2/mhd_sockets_funcs.c 2
/src/mhd2/src/mhd2/tls_gnu_funcs.c 2
/src/mhd2/src/mhd2/daemon_logger.c 1
/src/mhd2/src/mhd2/respond_with_error.c 1
/src/mhd2/src/mhd2/daemon_funcs.c 8
/src/mhd2/src/mhd2/mhd_panic.c 1
/src/mhd2/src/mhd2/response_destroy.c 3
/src/mhd2/src/mhd2/response_auth_digest.c 1
/src/mhd2/src/mhd2/response_add_header.c 1
/src/mhd2/src/mhd2/response_funcs.c 1
/src/mhd2/src/mhd2/response_from.c 2
/src/mhd2/src/mhd2/mhd_str.c 12
/src/mhd2/src/mhd2/request_get_value.c 1
/src/mhd2/src/mhd2/post_parser_funcs.c 22
/src/mhd2/src/mhd2/stream_process_states.c 1
/src/mhd2/src/mhd2/conn_tls_check.c 1
/src/mhd2/src/mhd2/mhd_socket_error_funcs.c 2
/src/mhd2/src/mhd2/./conn_mark_ready.h 5
/src/mhd2/src/mhd2/mhd_send.c 2

Fuzzer: fuzz_daemon

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 1347 93.6%
gold [1:9] 61 4.24%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 30 2.08%
All colors 1438 100

Fuzz blockers

The following nodes represent call sites where fuzz blockers occur.

Amount of callsites blocked Calltree index Parent function Callsite Largest blocked function
714 685 daemon_start_internal call site: 00685 start_worker_pool_threads
372 31 MHD_daemon_create call site: 00031 MHD_digest_auth_check
95 436 start_daemon_once() call site: 00436 MHD_daemon_destroy
27 405 start_daemon_once() call site: 00405 MHD_digest_auth_check_digest
24 620 daemon_start_internal call site: 00620 mhd_tls_gnu_daemon_init3
20 591 create_bind_listen_stream_socket_inner call site: 00591 create_bind_listen_stream_socket_inner
17 562 create_bind_listen_stream_socket_inner call site: 00562 create_bind_listen_stream_socket_inner
12 669 init_individual_conns call site: 00669 init_workers_pool
9 550 create_bind_listen_stream_socket call site: 00550 mhd_logger
5 535 daemon_start_internal call site: 00535 mhd_logger
4 25 mhd_lib_init_global_if_needed call site: 00025 fprintf
4 586 create_bind_listen_stream_socket_inner call site: 00586 create_bind_listen_stream_socket_inner

Runtime coverage analysis

Covered functions
51
Functions that are reachable but not covered
484
Reachable functions
549
Percentage of reachable functions covered
11.84%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/fuzz_daemon.cpp 2
/src/mhd2/src/mhd2/daemon_create.c 1
/src/mhd2/src/mhd2/mhd_lib_init.c 6
/src/mhd2/src/mhd2/mhd_panic.c 2
/src/mhd2/src/mhd2/mhd_mono_clock.c 2
/src/mhd2/src/mhd2/mhd_send.c 14
/src/mhd2/src/mhd2/tls_gnu_funcs.c 20
/src/mhd_helper.cpp 26
/src/mhd_helper.h 4
/src/mhd2/src/mhd2/action.c 5
/src/mhd2/src/mhd2/request_get_value.c 5
/src/mhd2/src/mhd2/response_from.c 4
/src/mhd2/src/mhd2/response_funcs.c 3
/src/mhd2/src/mhd2/response_destroy.c 4
/src/mhd2/src/mhd2/response_auth_digest.c 4
/src/mhd2/src/mhd2/response_add_header.c 4
/src/mhd2/src/mhd2/daemon_logger.c 1
/src/mhd2/src/mhd2/request_get_info.c 2
/src/mhd2/src/mhd2/auth_digest.c 45
/src/mhd2/src/mhd2/request_auth_get.c 1
/src/mhd2/src/mhd2/mhd_str.c 25
/src/mhd2/src/mhd2/stream_funcs.c 14
/src/mhd2/src/mhd2/mempool_funcs.c 9
/src/mhd2/src/mhd2/auth_basic.c 2
/src/mhd2/src/include/microhttpd2.h 2
/src/mhd2/src/mhd2/response_auth_basic.c 2
/src/mhd2/src/mhd2/daemon_funcs.c 9
/src/mhd2/src/mhd2/md5_int.c 4
/src/mhd2/src/mhd2/sha256_int.c 4
/src/mhd2/src/mhd2/sha512_256_int.c 4
/src/mhd2/src/mhd2/./mhd_bithelpers.h 4
/src/mhd2/src/mhd2/stream_process_request.c 31
/src/mhd2/src/include/microhttpd2_generated_daemon_options.h 3
/src/mhd2/src/mhd2/daemon_set_options.c 1
/src/mhd2/src/mhd2/daemon_start.c 44
/src/mhd2/src/mhd2/events_process.c 27
/src/mhd2/src/mhd2/upgrade_proc.c 3
/src/mhd2/src/mhd2/mhd_sockets_funcs.c 4
/src/mhd2/src/mhd2/./conn_mark_ready.h 5
/src/mhd2/src/mhd2/stream_process_reply.c 17
/src/mhd2/src/mhd2/extr_events_funcs.c 1
/src/mhd2/src/mhd2/daemon_add_conn.c 9
/src/mhd2/src/mhd2/mhd_tls_funcs.c 1
/src/mhd2/src/mhd2/mhd_threads.c 5
/src/mhd2/src/mhd2/conn_data_process.c 1
/src/mhd2/src/mhd2/stream_process_states.c 4
/src/mhd2/src/mhd2/mhd_socket_error_funcs.c 2
/src/mhd2/src/mhd2/respond_with_error.c 1
/src/mhd2/src/mhd2/request_funcs.c 2
/src/mhd2/src/mhd2/post_parser_funcs.c 28
/src/mhd2/src/mhd2/http_status_str.c 2
/src/mhd2/src/mhd2/mhd_read_file.c 1
/src/mhd2/src/mhd2/conn_tls_check.c 1
/src/mhd2/src/mhd2/conn_data_recv.c 1
/src/mhd2/src/mhd2/mhd_recv.c 3
/src/mhd2/src/mhd2/conn_data_send.c 2

Fuzzer: fuzz_crypto_int

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 0 0.0%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 27 100.%
All colors 27 100

Runtime coverage analysis

Covered functions
18
Functions that are reachable but not covered
0
Reachable functions
21
Percentage of reachable functions covered
100.0%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/fuzz_crypto_int.cpp 4
/src/mhd2/src/mhd2/md5_int.c 4
/src/mhd2/src/mhd2/./mhd_bithelpers.h 2
/src/mhd2/src/mhd2/sha256_int.c 4
/src/mhd2/src/mhd2/sha512_256_int.c 4

Fuzzer: fuzz_connection

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 134 34.0%
gold [1:9] 3 0.76%
yellow [10:29] 10 2.54%
greenyellow [30:49] 2 0.50%
lawngreen 50+ 244 62.0%
All colors 393 100

Fuzz blockers

The following nodes represent call sites where fuzz blockers occur.

Amount of callsites blocked Calltree index Parent function Callsite Largest blocked function
20 300 prepare_body_and_process(MHD_Connection&, std::__1::basic_string , std::__1::allocator >&, unsigned long, bool) call site: 00300 process_request_chunked_body
13 165 mhd_stream_parse_request_headers call site: 00165 handle_req_cookie_no_space
9 105 parse_http_std_method call site: 00105 send_redirect_fixed_rq_target
6 363 check_post_leftovers call site: 00363 process_complete_field
5 52 mhd_socket_set_hard_close call site: 00052 mhd_tls_gnu_conn_shutdown
5 151 mhd_stream_parse_request_headers call site: 00151 respond_with_error_len
5 179 mhd_stream_parse_request_headers call site: 00179 respond_with_error_len
5 370 check_post_leftovers call site: 00370 process_complete_field_all
5 376 check_post_leftovers call site: 00376 process_complete_field
4 65 mhd_daemon_reclaim_lbuf call site: 00065 fprintf
4 201 process_mpart_header call site: 00201 mhd_str_starts_with_token_opt_param
3 78 response_full_deinit call site: 00078 mhd_response_deinit_reusable

Runtime coverage analysis

Covered functions
107
Functions that are reachable but not covered
37
Reachable functions
156
Percentage of reachable functions covered
76.28%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/fuzz_connection.cpp 2
/src/mhd2/src/mhd2/mempool_funcs.c 8
/src/connection_helper.cpp 15
/src/mhd2/src/mhd2/stream_funcs.c 9
/src/mhd2/src/mhd2/request_funcs.c 2
/src/mhd2/src/mhd2/stream_process_request.c 19
/src/mhd2/src/mhd2/mhd_sockets_funcs.c 2
/src/mhd2/src/mhd2/tls_gnu_funcs.c 1
/src/mhd2/src/mhd2/daemon_logger.c 1
/src/mhd2/src/mhd2/respond_with_error.c 1
/src/mhd2/src/mhd2/daemon_funcs.c 7
/src/mhd2/src/mhd2/mhd_panic.c 1
/src/mhd2/src/mhd2/response_destroy.c 3
/src/mhd2/src/mhd2/response_auth_digest.c 1
/src/mhd2/src/mhd2/response_add_header.c 1
/src/mhd2/src/mhd2/response_funcs.c 1
/src/mhd2/src/mhd2/response_from.c 2
/src/mhd2/src/mhd2/mhd_str.c 12
/src/mhd2/src/mhd2/request_get_value.c 1
/src/mhd2/src/mhd2/post_parser_funcs.c 28
/src/mhd2/src/mhd2/mhd_mono_clock.c 1

Fuzz engine guidance

This sections provides heuristics that can be used as input to a fuzz engine when running a given fuzz target. The current focus is on providing input that is usable by libFuzzer.

/src/fuzz_crypto_ext.cpp

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


/src/fuzz_libinfo.cpp

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['mhd_lib_init_global_if_needed', 'mhd_mclock_init_once']

/src/fuzz_str.cpp

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['mhd_str_pct_decode_strict_n', 'mhd_str_pct_decode_lenient_n', 'fuzz_tokens(FuzzedDataProvider&)', 'fuzz_tokens(FuzzedDataProvider&)', 'fuzz_tokens(FuzzedDataProvider&)', 'fuzz_tokens(FuzzedDataProvider&)', 'fuzz_quoted(FuzzedDataProvider&)']

/src/fuzz_response.cpp

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['response_add_header_int', 'mhd_response_deinit_content_data', 'MHD_response_set_options', 'add_headers(FuzzedDataProvider&, MHD_Response*)', 'response_make_reusable', 'response_add_auth_digest_challenge_int', 'LLVMFuzzerTestOneInput']

/src/fuzz_mhd2.cpp

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['MHD_daemon_destroy', 'fuzz_digest_auth_calc(FuzzedDataProvider&)', 'fuzz_digest_auth_calc(FuzzedDataProvider&)', 'response_add_header_int', 'fuzz_digest_auth_calc(FuzzedDataProvider&)', 'mhd_response_deinit_content_data', 'mhd_mclock_init_once', 'daemon_configuration(FuzzedDataProvider&, MHD_Daemon*)', 'MHD_response_set_options', 'fuzz_response_config(FuzzedDataProvider&, MHD_Response*)']

/src/fuzz_daemon_connection.cpp

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['mhd_daemon_claim_lbuf_up_to', 'prepare_body_and_process(MHD_Connection&, std::__1::basic_string, std::__1::allocator >&, unsigned long, bool)', 'mhd_stream_parse_request_headers', 'parse_http_std_method', 'detect_post_enc', 'mhd_stream_process_req_recv_finished', 'LLVMFuzzerTestOneInput', 'get_request_line_inner', 'mhd_str_equal_caseless_bin_n', 'mhd_socket_set_hard_close']

/src/fuzz_daemon.cpp

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['daemon_start_internal', 'MHD_daemon_create', 'start_daemon_once()', 'start_daemon_once()', 'create_bind_listen_stream_socket_inner', 'init_individual_conns', 'create_bind_listen_stream_socket']

/src/fuzz_crypto_int.cpp

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


/src/fuzz_connection.cpp

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['prepare_body_and_process(MHD_Connection&, std::__1::basic_string, std::__1::allocator >&, unsigned long, bool)', 'mhd_stream_parse_request_headers', 'parse_http_std_method', 'check_post_leftovers', 'mhd_socket_set_hard_close', 'mhd_daemon_reclaim_lbuf']

Runtime coverage analysis

This section shows analysis of runtime coverage data.

For futher technical details on how this section is generated, please see the Glossary .

Complex functions with low coverage

Func name Function total lines Lines covered at runtime percentage covered Reached by fuzzers
mhd_mclock_init_once 66 27 40.90% ['fuzz_libinfo', 'fuzz_daemon', 'fuzz_mhd2']
mhd_str_pct_decode_strict_n 68 36 52.94% ['fuzz_daemon', 'fuzz_str']
mhd_str_pct_decode_lenient_n 97 52 53.60% ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_str', 'fuzz_connection']
mhd_str_quote 41 20 48.78% ['fuzz_response', 'fuzz_daemon', 'fuzz_str']
MHD_daemon_get_info_fixed_sz 122 4 3.278% ['fuzz_mhd2']
MHD_daemon_get_info_dynamic_sz 46 4 8.695% ['fuzz_mhd2']
MHD_daemon_set_options 231 53 22.94% ['fuzz_daemon', 'fuzz_mhd2']
detect_post_enc 56 15 26.78% ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection']
mhd_request_get_value_n 42 21 50.0% ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection']
mhd_conn_start_closing 275 49 17.81% ['fuzz_connection', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_mhd2']
mhd_stream_get_request_line 45 21 46.66% ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection']
mhd_stream_parse_request_headers 232 97 41.81% ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection']
mhd_conn_event_loop_state_update 118 15 12.71% ['fuzz_daemon_connection', 'fuzz_daemon']
daemon_set_work_mode 71 12 16.90% ['fuzz_daemon']
daemon_init_net 53 29 54.71% ['fuzz_daemon']
daemon_choose_and_preinit_events 164 69 42.07% ['fuzz_daemon']
create_bind_listen_stream_socket_inner 544 135 24.81% ['fuzz_daemon']
daemon_init_tls 41 12 29.26% ['fuzz_daemon']
set_d_threading_type 43 12 27.90% ['fuzz_daemon']
allocate_events 108 39 36.11% ['fuzz_daemon']
init_daemon_fds_monitoring 155 46 29.67% ['fuzz_daemon']
wait_for_response(int) 32 17 53.12% ['fuzz_daemon']
fuzz_mhd_stream_process_post_finish(MHD_Connection&,MHD_Daemon&,std::__1::basic_string ,std::__1::allocator >const&) 45 19 42.22% ['fuzz_connection']
mhd_monotonic_msec_counter 45 18 40.0% ['fuzz_daemon', 'fuzz_connection']
check_post_leftovers_urlenc 125 21 16.8% ['fuzz_daemon', 'fuzz_connection']
check_post_leftovers_mpart 117 24 20.51% ['fuzz_daemon', 'fuzz_connection']
check_post_leftovers_text 96 16 16.66% ['fuzz_daemon', 'fuzz_connection']
mhd_stream_get_no_space_err_status_code 148 51 34.45% ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection']
mhd_stream_is_timeout_expired 32 16 50.0% ['fuzz_daemon', 'fuzz_connection']
mhd_stream_process_upload_action 68 26 38.23% ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection']

Files and Directories in report

This section shows which files and directories are considered in this report. The main reason for showing this is fuzz introspector may include more code in the reasoning than is desired. This section helps identify if too many files/directories are included, e.g. third party code, which may be irrelevant for the threat model. In the event too much is included, fuzz introspector supports a configuration file that can exclude data from the report. See the following link for more information on how to create a config file: link

Files in report

Source file Reached by Covered by
[] []
/src/mhd2/src/mhd2/./conn_mark_ready.h ['fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon'] []
/src/mhd2/src/mhd2/http_status_str.c ['fuzz_response', 'fuzz_daemon'] []
/src/mhd2/src/mhd2/request_auth_get.c ['fuzz_daemon'] []
/src/mhd2/src/mhd2/auth_basic.c ['fuzz_daemon'] []
/src/mhd2/src/mhd2/stream_process_reply.c ['fuzz_mhd2', 'fuzz_daemon'] []
/src/mhd2/src/mhd2/events_process.c ['fuzz_mhd2', 'fuzz_daemon'] []
/src/mhd2/src/mhd2/request_get_value.c ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/fuzz_libinfo.cpp ['fuzz_libinfo'] ['fuzz_libinfo']
/src/mhd2/src/mhd2/auth_digest.c ['fuzz_mhd2', 'fuzz_daemon'] ['fuzz_mhd2']
/src/mhd2/src/mhd2/mhd_send.c ['fuzz_libinfo', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon'] ['fuzz_libinfo', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon']
/src/fuzz_str.cpp ['fuzz_str'] ['fuzz_str']
/src/mhd2/src/mhd2/conn_data_recv.c ['fuzz_daemon'] []
/src/fuzz_connection.cpp ['fuzz_connection'] ['fuzz_connection']
/src/mhd2/src/mhd2/conn_tls_check.c ['fuzz_daemon_connection', 'fuzz_daemon'] []
/src/mhd2/src/mhd2/response_from.c ['fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/response_auth_digest.c ['fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/upgrade_prep.c [] []
/src/mhd2/src/mhd2/daemon_add_conn.c ['fuzz_mhd2', 'fuzz_daemon'] []
/usr/local/bin/../include/c++/v1/string [] []
/src/mhd2/src/include/microhttpd2_generated_daemon_options.h ['fuzz_mhd2', 'fuzz_daemon'] ['fuzz_mhd2', 'fuzz_daemon']
/src/mhd2/src/mhd2/daemon_get_info.c ['fuzz_mhd2'] ['fuzz_mhd2']
/src/mhd2/src/mhd2/tls_gnu_funcs.c ['fuzz_libinfo', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_libinfo', 'fuzz_mhd2', 'fuzz_daemon']
/src/mhd2/src/mhd2/./mhd_bithelpers.h ['fuzz_mhd2', 'fuzz_daemon', 'fuzz_crypto_int'] []
/src/mhd2/src/mhd2/response_add_header.c ['fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/include/microhttpd2_generated_response_options.h ['fuzz_response', 'fuzz_mhd2'] ['fuzz_response', 'fuzz_mhd2']
/src/mhd2/src/mhd2/mhd_recv.c ['fuzz_daemon'] []
/usr/local/bin/../include/c++/v1/stdexcept [] []
/src/mhd2/src/mhd2/response_set_options.c ['fuzz_response', 'fuzz_mhd2'] ['fuzz_response', 'fuzz_mhd2']
/src/mhd2/src/mhd2/daemon_set_options.c ['fuzz_mhd2', 'fuzz_daemon'] ['fuzz_mhd2', 'fuzz_daemon']
/src/mhd2/src/mhd2/daemon_logger.c ['fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/request_get_info.c ['fuzz_daemon'] []
/src/mhd2/src/mhd2/post_parser_funcs.c ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/response_destroy.c ['fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/mhd_lib_init.c ['fuzz_libinfo', 'fuzz_mhd2', 'fuzz_daemon'] ['fuzz_libinfo', 'fuzz_mhd2', 'fuzz_daemon']
/src/mhd2/src/mhd2/sha512_256_int.c ['fuzz_mhd2', 'fuzz_daemon', 'fuzz_crypto_int'] ['fuzz_crypto_int']
/src/mhd2/src/mhd2/mhd_read_file.c ['fuzz_daemon'] []
/src/mhd2/src/mhd2/mhd_socket_error_funcs.c ['fuzz_daemon_connection', 'fuzz_daemon'] []
/src/mhd2/src/include/microhttpd2.h ['fuzz_daemon'] []
/src/mhd2/src/mhd2/mhd_mono_clock.c ['fuzz_libinfo', 'fuzz_mhd2', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_libinfo', 'fuzz_mhd2', 'fuzz_daemon', 'fuzz_connection']
/src/mhd2/src/mhd2/upgrade_proc.c ['fuzz_mhd2', 'fuzz_daemon'] []
/src/fuzz_daemon.cpp ['fuzz_daemon'] ['fuzz_daemon']
/src/mhd2/src/mhd2/./mhd_lib_init_impl.h [] []
/src/mhd2/src/mhd2/lib_get_info.c ['fuzz_libinfo'] ['fuzz_libinfo']
/src/mhd2/src/mhd2/mhd_str.c ['fuzz_str', 'fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_str', 'fuzz_response', 'fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/mhd_panic.c ['fuzz_libinfo', 'fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_libinfo', 'fuzz_mhd2', 'fuzz_daemon']
/src/mhd2/src/mhd2/response_funcs.c ['fuzz_response', 'fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_response', 'fuzz_mhd2']
/src/mhd2/src/mhd2/conn_data_send.c ['fuzz_daemon'] []
/src/mhd_helper.cpp ['fuzz_response', 'fuzz_daemon'] ['fuzz_response', 'fuzz_daemon']
/src/mhd2/src/mhd2/daemon_create.c ['fuzz_mhd2', 'fuzz_daemon'] ['fuzz_mhd2', 'fuzz_daemon']
/src/mhd2/src/mhd2/response_auth_basic.c ['fuzz_response', 'fuzz_daemon'] ['fuzz_response']
/src/mhd2/src/mhd2/md5_ext.c ['fuzz_crypto_ext'] ['fuzz_crypto_ext']
/src/mhd2/src/mhd2/daemon_logger_default.c [] []
/src/mhd2/src/mhd2/daemon_start.c ['fuzz_mhd2', 'fuzz_daemon'] ['fuzz_mhd2', 'fuzz_daemon']
/src/mhd2/src/mhd2/mhd_tls_funcs.c ['fuzz_daemon'] []
/src/mhd2/src/mhd2/stream_process_request.c ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/mempool_funcs.c ['fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/request_funcs.c ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/daemon_funcs.c ['fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/fuzz_crypto_ext.cpp ['fuzz_crypto_ext'] ['fuzz_crypto_ext']
/src/fuzz_response.cpp ['fuzz_response'] ['fuzz_response']
/src/mhd2/src/mhd2/sha256_int.c ['fuzz_mhd2', 'fuzz_daemon', 'fuzz_crypto_int'] ['fuzz_crypto_int']
/src/mhd2/src/mhd2/conn_data_process.c ['fuzz_daemon'] []
/src/mhd2/src/mhd2/extr_events_funcs.c ['fuzz_mhd2', 'fuzz_daemon'] []
/src/mhd2/src/mhd2/stream_process_states.c ['fuzz_daemon_connection', 'fuzz_daemon'] ['fuzz_daemon_connection']
/src/mhd2/src/mhd2/md5_int.c ['fuzz_mhd2', 'fuzz_daemon', 'fuzz_crypto_int'] ['fuzz_crypto_int']
/src/connection_helper.cpp ['fuzz_daemon_connection', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/sha256_ext.c ['fuzz_crypto_ext'] ['fuzz_crypto_ext']
/src/mhd2/src/mhd2/respond_with_error.c ['fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/mhd_helper.h ['fuzz_daemon'] []
/src/fuzz_daemon_connection.cpp ['fuzz_daemon_connection'] ['fuzz_daemon_connection']
/src/mhd2/src/mhd2/mhd_threads.c ['fuzz_daemon'] []
/src/mhd2/src/mhd2/mhd_sockets_funcs.c ['fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/fuzz_mhd2.cpp ['fuzz_mhd2'] ['fuzz_mhd2']
/src/fuzz_crypto_int.cpp ['fuzz_crypto_int'] ['fuzz_crypto_int']
/src/mhd2/src/mhd2/stream_funcs.c ['fuzz_mhd2', 'fuzz_daemon_connection', 'fuzz_daemon', 'fuzz_connection'] ['fuzz_daemon_connection', 'fuzz_connection']
/src/mhd2/src/mhd2/action.c ['fuzz_daemon'] []

Directories in report

Directory
/usr/local/bin/../include/c++/v1/
/src/mhd2/src/mhd2/./
/src/mhd2/src/mhd2/
/src/mhd2/src/include/
/src/