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: libyaml_emitter_fuzzer

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 814 90.4%
gold [1:9] 3 0.33%
yellow [10:29] 4 0.44%
greenyellow [30:49] 2 0.22%
lawngreen 50+ 77 8.55%
All colors 900 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
2 2 1 :

['yaml_parser_set_parser_error']

2 2 yaml_parser_parse_stream_start call site: 00073 /src/libyaml/src/parser.c:340
0 2 1 :

['yaml_parser_set_reader_error']

0 2 yaml_parser_update_buffer call site: 00095 /src/libyaml/src/reader.c:463
0 0 None 3838 3934 yaml_parser_fetch_next_token call site: 00077 /src/libyaml/src/scanner.c:870
0 0 None 14 14 yaml_parser_fetch_stream_start call site: 00098 /src/libyaml/src/scanner.c:1303
0 0 None 2 2 yaml_parser_stale_simple_keys call site: 00074 /src/libyaml/src/scanner.c:1073
0 0 None 0 1742 yaml_parser_fetch_more_tokens call site: 00074 /src/libyaml/src/scanner.c:827
0 0 None 0 1742 yaml_parser_fetch_more_tokens call site: 00074 /src/libyaml/src/scanner.c:832
0 0 None 0 45 yaml_parser_initialize call site: 00003 /src/libyaml/src/api.c:182
0 0 None 0 42 yaml_parser_initialize call site: 00004 /src/libyaml/src/api.c:184
0 0 None 0 39 yaml_parser_initialize call site: 00005 /src/libyaml/src/api.c:186
0 0 None 0 36 yaml_parser_initialize call site: 00006 /src/libyaml/src/api.c:188
0 0 None 0 33 yaml_parser_initialize call site: 00007 /src/libyaml/src/api.c:190

Runtime coverage analysis

Covered functions
26
Functions that are reachable but not covered
131
Reachable functions
156
Percentage of reachable functions covered
16.03%
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
libyaml_emitter_fuzzer.c 3
libyamlapi.c 29
yaml_write_handler.h 1
libyamlparser.c 23
libyamlscanner.c 40
libyamlreader.c 4
libyamlemitter.c 47
libyamlwriter.c 2

Fuzzer: libyaml_scanner_fuzzer

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 18 5.08%
gold [1:9] 12 3.38%
yellow [10:29] 10 2.82%
greenyellow [30:49] 6 1.69%
lawngreen 50+ 308 87.0%
All colors 354 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
0 2 1 :

['yaml_parser_set_reader_error']

0 2 yaml_parser_update_buffer call site: 00048 /src/libyaml/src/reader.c:463
0 0 None 0 3744 yaml_parser_fetch_next_token call site: 00063 /src/libyaml/src/scanner.c:885
0 0 None 0 511 yaml_parser_fetch_directive call site: 00072 /src/libyaml/src/scanner.c:1374
0 0 None 0 505 yaml_parser_fetch_directive call site: 00073 /src/libyaml/src/scanner.c:1379
0 0 None 0 392 yaml_parser_fetch_flow_scalar call site: 00266 /src/libyaml/src/scanner.c:1864
0 0 None 0 348 yaml_parser_fetch_tag call site: 00205 /src/libyaml/src/scanner.c:1802
0 0 None 0 344 yaml_parser_fetch_plain_scalar call site: 00308 /src/libyaml/src/scanner.c:1895
0 0 None 0 253 yaml_parser_scan_tag_uri call site: 00118 /src/libyaml/src/scanner.c:2632
0 0 None 0 193 yaml_parser_fetch_anchor call site: 00193 /src/libyaml/src/scanner.c:1772
0 0 None 0 50 yaml_parser_fetch_value call site: 00187 /src/libyaml/src/scanner.c:1699
0 0 None 0 45 yaml_parser_initialize call site: 00003 /src/libyaml/src/api.c:182
0 0 None 0 42 yaml_parser_initialize call site: 00004 /src/libyaml/src/api.c:184

Runtime coverage analysis

Covered functions
58
Functions that are reachable but not covered
5
Reachable functions
62
Percentage of reachable functions covered
91.94%
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
libyaml_scanner_fuzzer.c 1
libyamlapi.c 11
libyamlscanner.c 41
libyamlreader.c 4

Fuzzer: libyaml_loader_fuzzer

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 32 5.40%
gold [1:9] 14 2.36%
yellow [10:29] 15 2.53%
greenyellow [30:49] 10 1.68%
lawngreen 50+ 521 88.0%
All colors 592 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
0 2 1 :

['yaml_parser_set_parser_error']

0 2 yaml_parser_parse_stream_start call site: 00032 /src/libyaml/src/parser.c:340
0 2 1 :

['yaml_parser_set_reader_error']

0 2 yaml_parser_update_buffer call site: 00054 /src/libyaml/src/reader.c:463
0 0 None 2 43 yaml_parser_parse_node call site: 00399 /src/libyaml/src/parser.c:629
0 0 None 2 2 yaml_strdup call site: 00359 /src/libyaml/src/api.c:63
0 0 None 0 8864 yaml_parser_parse_flow_mapping_key call site: 00480 /src/libyaml/src/parser.c:1148
0 0 None 0 6535 yaml_parser_load call site: 00026 /src/libyaml/src/loader.c:95
0 0 None 0 5307 yaml_parser_parse_block_sequence_entry call site: 00424 /src/libyaml/src/parser.c:769
0 0 None 0 5307 yaml_parser_parse_block_mapping_key call site: 00440 /src/libyaml/src/parser.c:877
0 0 None 0 5301 yaml_parser_parse_flow_sequence_entry call site: 00457 /src/libyaml/src/parser.c:992
0 0 None 0 3744 yaml_parser_fetch_next_token call site: 00069 /src/libyaml/src/scanner.c:885
0 0 None 0 3591 yaml_parser_process_directives call site: 00351 /src/libyaml/src/parser.c:1289
0 0 None 0 2406 yaml_parser_load_nodes call site: 00542 /src/libyaml/src/loader.c:235

Runtime coverage analysis

Covered functions
97
Functions that are reachable but not covered
6
Reachable functions
102
Percentage of reachable functions covered
94.12%
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
libyaml_loader_fuzzer.c 1
libyamlapi.c 14
libyamlloader.c 14
libyamlparser.c 23
libyamlscanner.c 40
libyamlreader.c 4

Fuzzer: libyaml_parser_fuzzer

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 21 4.02%
gold [1:9] 12 2.29%
yellow [10:29] 15 2.87%
greenyellow [30:49] 13 2.49%
lawngreen 50+ 461 88.3%
All colors 522 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
0 2 1 :

['yaml_parser_set_parser_error']

0 2 yaml_parser_parse_stream_start call site: 00028 /src/libyaml/src/parser.c:340
0 2 1 :

['yaml_parser_set_reader_error']

0 2 yaml_parser_update_buffer call site: 00050 /src/libyaml/src/reader.c:463
0 0 None 2 43 yaml_parser_parse_node call site: 00395 /src/libyaml/src/parser.c:629
0 0 None 2 2 yaml_strdup call site: 00355 /src/libyaml/src/api.c:63
0 0 None 0 8864 yaml_parser_parse_flow_mapping_key call site: 00476 /src/libyaml/src/parser.c:1148
0 0 None 0 5307 yaml_parser_parse_block_sequence_entry call site: 00420 /src/libyaml/src/parser.c:769
0 0 None 0 5307 yaml_parser_parse_block_mapping_key call site: 00436 /src/libyaml/src/parser.c:877
0 0 None 0 5301 yaml_parser_parse_flow_sequence_entry call site: 00453 /src/libyaml/src/parser.c:992
0 0 None 0 3744 yaml_parser_fetch_next_token call site: 00065 /src/libyaml/src/scanner.c:885
0 0 None 0 3591 yaml_parser_process_directives call site: 00347 /src/libyaml/src/parser.c:1289
0 0 None 0 1849 yaml_parser_process_directives call site: 00351 /src/libyaml/src/parser.c:1314
0 0 None 0 1849 yaml_parser_process_directives call site: 00361 /src/libyaml/src/parser.c:1330

Runtime coverage analysis

Covered functions
82
Functions that are reachable but not covered
6
Reachable functions
87
Percentage of reachable functions covered
93.1%
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
libyaml_parser_fuzzer.c 1
libyamlapi.c 13
libyamlparser.c 23
libyamlscanner.c 40
libyamlreader.c 4

Fuzzer: libyaml_reformatter_fuzzer

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 47 5.83%
gold [1:9] 17 2.11%
yellow [10:29] 14 1.73%
greenyellow [30:49] 10 1.24%
lawngreen 50+ 717 89.0%
All colors 805 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_emit_stream_start call site: 00554 /src/libyaml/src/emitter.c:499
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_analyze_version_directive call site: 00564 /src/libyaml/src/emitter.c:1355
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_append_tag_directive call site: 00575 /src/libyaml/src/emitter.c:373
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_emit_document_end call site: 00711 /src/libyaml/src/emitter.c:708
0 2 1 :

['yaml_parser_set_parser_error']

0 2 yaml_parser_parse_stream_start call site: 00052 /src/libyaml/src/parser.c:340
0 2 1 :

['yaml_parser_set_reader_error']

0 2 yaml_parser_update_buffer call site: 00074 /src/libyaml/src/reader.c:463
0 0 None 4 618 yaml_emitter_emit_document_start call site: 00564 /src/libyaml/src/emitter.c:566
0 0 None 4 618 yaml_emitter_emit_document_start call site: 00574 /src/libyaml/src/emitter.c:576
0 0 None 4 562 yaml_emitter_emit_document_start call site: 00582 /src/libyaml/src/emitter.c:582
0 0 None 4 490 yaml_emitter_emit_document_start call site: 00583 /src/libyaml/src/emitter.c:596
0 0 None 4 453 yaml_emitter_emit_document_start call site: 00587 /src/libyaml/src/emitter.c:598
0 0 None 4 415 yaml_emitter_emit_document_start call site: 00590 /src/libyaml/src/emitter.c:605

Runtime coverage analysis

Covered functions
137
Functions that are reachable but not covered
7
Reachable functions
143
Percentage of reachable functions covered
95.1%
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
libyaml_reformatter_fuzzer.c 1
libyamlapi.c 18
yaml_write_handler.h 1
libyamlparser.c 23
libyamlscanner.c 40
libyamlreader.c 4
libyamlemitter.c 47
libyamlwriter.c 2

Fuzzer: libyaml_reformatter_alt_fuzzer

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 62 6.63%
gold [1:9] 14 1.49%
yellow [10:29] 18 1.92%
greenyellow [30:49] 12 1.28%
lawngreen 50+ 829 88.6%
All colors 935 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
24 24 1 :

['yaml_emitter_write_bom']

24 24 yaml_emitter_emit_stream_start call site: 00643 /src/libyaml/src/emitter.c:533
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_emit_stream_start call site: 00643 /src/libyaml/src/emitter.c:499
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_analyze_version_directive call site: 00653 /src/libyaml/src/emitter.c:1355
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_append_tag_directive call site: 00664 /src/libyaml/src/emitter.c:373
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_emit_document_end call site: 00800 /src/libyaml/src/emitter.c:708
0 2 1 :

['yaml_parser_set_parser_error']

0 2 yaml_parser_parse_stream_start call site: 00056 /src/libyaml/src/parser.c:340
0 2 1 :

['yaml_parser_set_reader_error']

0 2 yaml_parser_update_buffer call site: 00078 /src/libyaml/src/reader.c:463
0 0 None 24 24 yaml_emitter_emit_stream_start call site: 00643 /src/libyaml/src/emitter.c:518
0 0 None 4 618 yaml_emitter_emit_document_start call site: 00653 /src/libyaml/src/emitter.c:566
0 0 None 4 618 yaml_emitter_emit_document_start call site: 00663 /src/libyaml/src/emitter.c:576
0 0 None 4 562 yaml_emitter_emit_document_start call site: 00671 /src/libyaml/src/emitter.c:582
0 0 None 4 490 yaml_emitter_emit_document_start call site: 00672 /src/libyaml/src/emitter.c:596

Runtime coverage analysis

Covered functions
163
Functions that are reachable but not covered
9
Reachable functions
171
Percentage of reachable functions covered
94.74%
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
libyaml_reformatter_alt_fuzzer.c 1
libyamlapi.c 20
yaml_write_handler.h 1
libyamlloader.c 14
libyamlparser.c 23
libyamlscanner.c 40
libyamlreader.c 4
libyamldumper.c 11
libyamlemitter.c 47
libyamlwriter.c 2

Fuzzer: libyaml_deconstructor_fuzzer

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 159 15.4%
gold [1:9] 15 1.45%
yellow [10:29] 14 1.35%
greenyellow [30:49] 11 1.06%
lawngreen 50+ 832 80.6%
All colors 1031 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
24 24 1 :

['yaml_emitter_write_bom']

24 24 yaml_emitter_emit_stream_start call site: 00107 /src/libyaml/src/emitter.c:533
19 19 1 :

['yaml_emitter_analyze_anchor']

19 252 yaml_emitter_analyze_event call site: 00090 /src/libyaml/src/emitter.c:1722
19 19 1 :

['yaml_emitter_analyze_anchor']

19 31 yaml_emitter_analyze_event call site: 00101 /src/libyaml/src/emitter.c:1739
19 19 1 :

['yaml_emitter_analyze_anchor']

19 31 yaml_emitter_analyze_event call site: 00103 /src/libyaml/src/emitter.c:1753
7 7 1 :

['yaml_emitter_analyze_version_directive']

33 625 yaml_emitter_emit_document_start call site: 00116 /src/libyaml/src/emitter.c:565
4 113 3 :

['yaml_emitter_write_tag_content', 'strlen', 'yaml_emitter_write_tag_handle']

4 302 yaml_emitter_emit_document_start call site: 00148 /src/libyaml/src/emitter.c:619
4 86 6 :

['yaml_free', 'yaml_check_utf8', 'yaml_strdup', 'yaml_malloc', 'strlen', 'yaml_stack_extend']

4 86 yaml_document_start_event_initialize call site: 00338 /src/libyaml/src/api.c:732
2 2 1 :

['yaml_emitter_set_emitter_error']

2 2 yaml_emitter_emit_stream_start call site: 00107 /src/libyaml/src/emitter.c:499
2 2 1 :

['yaml_emitter_set_emitter_error']

2 2 yaml_emitter_emit_document_end call site: 00266 /src/libyaml/src/emitter.c:708
2 2 1 :

['yaml_emitter_set_emitter_error']

2 2 yaml_emitter_analyze_tag call site: 00096 /src/libyaml/src/emitter.c:1468
0 76 1 :

['yaml_emitter_write_indicator']

0 151 yaml_emitter_process_tag call site: 00184 /src/libyaml/src/emitter.c:1283
0 75 2 :

['yaml_emitter_write_indent', 'yaml_emitter_write_indicator']

0 95 yaml_emitter_emit_document_start call site: 00165 /src/libyaml/src/emitter.c:666

Runtime coverage analysis

Covered functions
136
Functions that are reachable but not covered
19
Reachable functions
154
Percentage of reachable functions covered
87.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
libyaml_deconstructor_fuzzer.c 1
libyamlapi.c 28
yaml_write_handler.h 1
libyamlemitter.c 47
libyamlwriter.c 2
libyamlparser.c 23
libyamlscanner.c 40
libyamlreader.c 4

Fuzzer: libyaml_dumper_fuzzer

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 66 6.40%
gold [1:9] 27 2.61%
yellow [10:29] 24 2.32%
greenyellow [30:49] 14 1.35%
lawngreen 50+ 900 87.2%
All colors 1031 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
24 24 1 :

['yaml_emitter_write_bom']

24 24 yaml_emitter_emit_stream_start call site: 00087 /src/libyaml/src/emitter.c:533
2 2 1 :

['strlen']

2 42 yaml_document_add_scalar call site: 00895 /src/libyaml/src/api.c:1218
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_emit_stream_start call site: 00087 /src/libyaml/src/emitter.c:499
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_analyze_version_directive call site: 00097 /src/libyaml/src/emitter.c:1355
0 2 1 :

['yaml_emitter_set_emitter_error']

0 2 yaml_emitter_emit_document_end call site: 00246 /src/libyaml/src/emitter.c:708
0 2 1 :

['yaml_parser_set_parser_error']

0 2 yaml_parser_parse_stream_start call site: 00324 /src/libyaml/src/parser.c:340
0 2 1 :

['yaml_parser_set_reader_error']

0 2 yaml_parser_update_buffer call site: 00346 /src/libyaml/src/reader.c:463
0 0 None 24 24 yaml_emitter_emit_stream_start call site: 00087 /src/libyaml/src/emitter.c:518
0 0 None 4 618 yaml_emitter_emit_document_start call site: 00097 /src/libyaml/src/emitter.c:566
0 0 None 4 562 yaml_emitter_emit_document_start call site: 00117 /src/libyaml/src/emitter.c:582
0 0 None 4 490 yaml_emitter_emit_document_start call site: 00118 /src/libyaml/src/emitter.c:596
0 0 None 4 453 yaml_emitter_emit_document_start call site: 00122 /src/libyaml/src/emitter.c:598

Runtime coverage analysis

Covered functions
174
Functions that are reachable but not covered
9
Reachable functions
182
Percentage of reachable functions covered
95.05%
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
libyaml_dumper_fuzzer.c 4
libyamlapi.c 28
yaml_write_handler.h 1
libyamldumper.c 11
libyamlemitter.c 47
libyamlwriter.c 2
libyamlloader.c 14
libyamlparser.c 23
libyamlscanner.c 40
libyamlreader.c 4

Fuzzer: libyaml_deconstructor_alt_fuzzer

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 166 15.9%
gold [1:9] 14 1.34%
yellow [10:29] 17 1.62%
greenyellow [30:49] 9 0.86%
lawngreen 50+ 838 80.2%
All colors 1044 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
1238 1238 1 :

['yaml_emitter_dump_alias']

1238 1238 yaml_emitter_dump_node call site: 01004 /src/libyaml/src/dumper.c:275
24 24 1 :

['yaml_emitter_write_bom']

24 24 yaml_emitter_emit_stream_start call site: 00108 /src/libyaml/src/emitter.c:533
19 19 1 :

['yaml_emitter_analyze_anchor']

19 252 yaml_emitter_analyze_event call site: 00091 /src/libyaml/src/emitter.c:1722
19 19 1 :

['yaml_emitter_analyze_anchor']

19 31 yaml_emitter_analyze_event call site: 00102 /src/libyaml/src/emitter.c:1739
19 19 1 :

['yaml_emitter_analyze_anchor']

19 31 yaml_emitter_analyze_event call site: 00104 /src/libyaml/src/emitter.c:1753
8 8 1 :

['yaml_emitter_generate_anchor']

1246 5012 yaml_emitter_dump_node call site: 01003 /src/libyaml/src/dumper.c:270
7 7 1 :

['yaml_emitter_analyze_version_directive']

33 625 yaml_emitter_emit_document_start call site: 00117 /src/libyaml/src/emitter.c:565
4 113 3 :

['yaml_emitter_write_tag_content', 'strlen', 'yaml_emitter_write_tag_handle']

4 302 yaml_emitter_emit_document_start call site: 00149 /src/libyaml/src/emitter.c:619
4 89 6 :

['yaml_free', 'yaml_check_utf8', 'yaml_strdup', 'yaml_malloc', 'strlen', 'yaml_stack_extend']

4 89 yaml_document_initialize call site: 00340 /src/libyaml/src/api.c:1073
2 2 1 :

['yaml_emitter_set_emitter_error']

2 2 yaml_emitter_emit_stream_start call site: 00108 /src/libyaml/src/emitter.c:499
2 2 1 :

['yaml_emitter_set_emitter_error']

2 2 yaml_emitter_emit_document_end call site: 00267 /src/libyaml/src/emitter.c:708
2 2 1 :

['yaml_emitter_set_emitter_error']

2 2 yaml_emitter_analyze_tag call site: 00097 /src/libyaml/src/emitter.c:1468

Runtime coverage analysis

Covered functions
143
Functions that are reachable but not covered
21
Reachable functions
163
Percentage of reachable functions covered
87.12%
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
libyaml_deconstructor_alt_fuzzer.c 1
libyamlapi.c 26
yaml_write_handler.h 1
libyamldumper.c 11
libyamlemitter.c 47
libyamlwriter.c 2
libyamlparser.c 23
libyamlscanner.c 40
libyamlreader.c 4

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.

libyaml_emitter_fuzzer.c

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=['yaml_parser_fetch_stream_start', 'LLVMFuzzerTestOneInput', 'yaml_stream_start_event_initialize', 'yaml_event_delete', 'yaml_parser_delete', 'yaml_parser_initialize', 'yaml_emitter_initialize', 'yaml_emitter_delete']

libyaml_scanner_fuzzer.c

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=['yaml_parser_initialize', 'yaml_parser_delete', 'yaml_parser_determine_encoding', 'yaml_parser_update_buffer', 'yaml_parser_fetch_directive', 'yaml_parser_fetch_anchor', 'yaml_parser_fetch_tag', 'yaml_parser_fetch_block_scalar', 'yaml_parser_fetch_flow_scalar', 'yaml_parser_fetch_plain_scalar']

libyaml_loader_fuzzer.c

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=['yaml_parser_initialize', 'yaml_parser_load_scalar', 'yaml_parser_append_tag_directive', 'yaml_parser_state_machine', 'yaml_parser_load_sequence', 'yaml_parser_load_mapping', 'yaml_parser_determine_encoding', 'yaml_parser_update_buffer', 'yaml_parser_fetch_directive', 'yaml_parser_fetch_anchor']

libyaml_parser_fuzzer.c

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=['yaml_parser_initialize', 'yaml_parser_append_tag_directive', 'yaml_parser_state_machine', 'yaml_parser_determine_encoding', 'yaml_parser_update_buffer', 'yaml_parser_fetch_directive', 'yaml_parser_fetch_anchor', 'yaml_parser_fetch_tag', 'yaml_parser_fetch_block_scalar', 'yaml_parser_fetch_flow_scalar']

libyaml_reformatter_fuzzer.c

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=['yaml_parser_initialize', 'yaml_emitter_initialize', 'yaml_emitter_analyze_tag_directive', 'yaml_emitter_write_plain_scalar', 'yaml_parser_append_tag_directive', 'yaml_parser_state_machine', 'yaml_emitter_analyze_anchor', 'yaml_emitter_append_tag_directive', 'yaml_parser_determine_encoding', 'yaml_parser_update_buffer']

libyaml_reformatter_alt_fuzzer.c

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=['yaml_parser_initialize', 'yaml_emitter_initialize', 'yaml_emitter_analyze_tag_directive', 'yaml_parser_load_scalar', 'yaml_emitter_write_plain_scalar', 'yaml_parser_append_tag_directive', 'yaml_parser_state_machine', 'yaml_parser_load_sequence', 'yaml_parser_load_mapping', 'yaml_emitter_analyze_anchor']

libyaml_deconstructor_fuzzer.c

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=['yaml_emitter_write_double_quoted_scalar', 'yaml_document_start_event_initialize', 'yaml_emitter_state_machine', 'yaml_emitter_write_plain_scalar', 'yaml_parser_initialize', 'yaml_emitter_initialize', 'yaml_emitter_write_indent', 'yaml_emitter_emit_document_content', 'yaml_emitter_emit']

libyaml_dumper_fuzzer.c

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=['yaml_parser_initialize', 'yaml_emitter_initialize', 'yaml_emitter_analyze_tag_directive', 'yaml_emitter_write_plain_scalar', 'yaml_parser_load_scalar', 'yaml_emitter_analyze_anchor', 'yaml_emitter_state_machine', 'yaml_emitter_flush', 'yaml_stack_extend', 'yaml_parser_append_tag_directive']

libyaml_deconstructor_alt_fuzzer.c

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=['yaml_emitter_write_double_quoted_scalar', 'yaml_document_initialize', 'yaml_emitter_state_machine', 'yaml_emitter_write_plain_scalar', 'yaml_parser_initialize', 'yaml_emitter_initialize', 'yaml_emitter_write_indent', 'yaml_emitter_emit_document_content', 'yaml_emitter_emit']

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/libyaml_deconstructor_fuzzer.c ['libyaml_deconstructor_fuzzer'] ['libyaml_deconstructor_fuzzer']
/src/libyaml/src/reader.c ['libyaml_emitter_fuzzer', 'libyaml_scanner_fuzzer', 'libyaml_loader_fuzzer', 'libyaml_parser_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer'] ['libyaml_emitter_fuzzer', 'libyaml_scanner_fuzzer', 'libyaml_loader_fuzzer', 'libyaml_parser_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer']
/src/libyaml_parser_fuzzer.c ['libyaml_parser_fuzzer'] ['libyaml_parser_fuzzer']
/src/libyaml_emitter_fuzzer.c ['libyaml_emitter_fuzzer'] ['libyaml_emitter_fuzzer']
/src/libyaml/src/api.c ['libyaml_emitter_fuzzer', 'libyaml_scanner_fuzzer', 'libyaml_loader_fuzzer', 'libyaml_parser_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer'] ['libyaml_emitter_fuzzer', 'libyaml_scanner_fuzzer', 'libyaml_loader_fuzzer', 'libyaml_parser_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer']
/src/libyaml/src/loader.c ['libyaml_loader_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_dumper_fuzzer'] ['libyaml_loader_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_dumper_fuzzer']
/src/libyaml/src/scanner.c ['libyaml_emitter_fuzzer', 'libyaml_scanner_fuzzer', 'libyaml_loader_fuzzer', 'libyaml_parser_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer'] ['libyaml_emitter_fuzzer', 'libyaml_scanner_fuzzer', 'libyaml_loader_fuzzer', 'libyaml_parser_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer']
/src/libyaml/src/parser.c ['libyaml_emitter_fuzzer', 'libyaml_loader_fuzzer', 'libyaml_parser_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer'] ['libyaml_emitter_fuzzer', 'libyaml_loader_fuzzer', 'libyaml_parser_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer']
/src/libyaml/src/dumper.c ['libyaml_reformatter_alt_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer'] ['libyaml_reformatter_alt_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer']
/src/libyaml_dumper_fuzzer.c ['libyaml_dumper_fuzzer'] ['libyaml_dumper_fuzzer']
/src/libyaml/src/writer.c ['libyaml_emitter_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer'] ['libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer']
/src/libyaml_reformatter_fuzzer.c ['libyaml_reformatter_fuzzer'] ['libyaml_reformatter_fuzzer']
/src/libyaml_reformatter_alt_fuzzer.c ['libyaml_reformatter_alt_fuzzer'] ['libyaml_reformatter_alt_fuzzer']
/src/libyaml_loader_fuzzer.c ['libyaml_loader_fuzzer'] ['libyaml_loader_fuzzer']
/src/yaml_write_handler.h ['libyaml_emitter_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer'] ['libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer']
/src/libyaml_scanner_fuzzer.c ['libyaml_scanner_fuzzer'] ['libyaml_scanner_fuzzer']
/src/libyaml_deconstructor_alt_fuzzer.c ['libyaml_deconstructor_alt_fuzzer'] ['libyaml_deconstructor_alt_fuzzer']
/src/libyaml/src/emitter.c ['libyaml_emitter_fuzzer', 'libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer'] ['libyaml_reformatter_fuzzer', 'libyaml_reformatter_alt_fuzzer', 'libyaml_deconstructor_fuzzer', 'libyaml_dumper_fuzzer', 'libyaml_deconstructor_alt_fuzzer']

Directories in report

Directory
/src/
/src/libyaml/src/