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: flexverifier_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 1 1.02%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 97 98.9%
All colors 98 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
1 58 flexbuffers::Vector::operator[](unsigned long) const call site: 00058

Runtime coverage analysis

Covered functions
47
Functions that are reachable but not covered
2
Reachable functions
95
Percentage of reachable functions covered
97.89%
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/flatbuffers/tests/fuzzer/flexbuffers_verifier_fuzzer.cc 1
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flexbuffers.h 39
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/base.h 8

Fuzzer: verifier_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 2 0.46%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 425 99.5%
All colors 427 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
1 204 flexbuffers::VerifyBuffer(unsigned char const*, unsigned long, std::__1::vector >*) call site: 00204
1 257 flexbuffers::Vector::operator[](unsigned long) const call site: 00257

Runtime coverage analysis

Covered functions
215
Functions that are reachable but not covered
8
Reachable functions
424
Percentage of reachable functions covered
98.11%
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/flatbuffers/tests/fuzzer/flatbuffers_verifier_fuzzer.cc 1
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/verifier.h 55
/src/flatbuffers/tests/fuzzer/../../tests/cpp17/generated_cpp17/monster_test_generated.h 42
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/buffer.h 6
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/base.h 10
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/table.h 50
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector.h 15
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flex_flat_util.h 1
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flexbuffers.h 39

Fuzzer: 64bit_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 13 4.98%
gold [1:9] 2 0.76%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 246 94.2%
All colors 261 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
12 165 flatbuffers::AccessBuffer(unsigned char const*, unsigned long, bool) call site: 00165 _Z20scalar_as_underlyingIbEN20underlying_of_scalarIT_Xsr11flatbuffers7is_enumIS1_EE5valueEE4typeES1_
1 14 bool flatbuffers::VerifierTemplate ::VerifyBufferFromStart (char const*, unsigned long) call site: 00014

Runtime coverage analysis

Covered functions
253
Functions that are reachable but not covered
12
Reachable functions
312
Percentage of reachable functions covered
96.15%
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/flatbuffers/tests/fuzzer/flatbuffers_64bit_fuzzer.cc 12
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/verifier.h 34
/src/flatbuffers/tests/fuzzer/../../tests/64bit/test_64bit_generated.h 20
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/base.h 11
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/buffer.h 9
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/table.h 30
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector.h 38
/src/flatbuffers/tests/fuzzer/../../tests/test_assert.h 2
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/util.h 1
/src/flatbuffers/tests/test_assert.cpp 1
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/string.h 2

Fuzzer: annotator_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 195 17.8%
gold [1:9] 0 0.0%
yellow [10:29] 6 0.54%
greenyellow [30:49] 27 2.47%
lawngreen 50+ 863 79.1%
All colors 1091 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
44 320 flatbuffers::Vector , unsigned int>::Get(unsigned int) const call site: 00320 _ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection8KeyValueEEEjEEbPKNS_6VectorIT0_T1_EE
15 302 flatbuffers::Vector , unsigned int>::Get(unsigned int) const call site: 00302 _ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetIN10reflection7RPCCallEEEjEEbPKNS_6VectorIT0_T1_EE
13 378 flatbuffers::Vector , unsigned int>::Get(unsigned int) const call site: 00378 _ZNK11flatbuffers16VerifierTemplateILb0EE12VerifyVectorITpTnRiJENS_6OffsetINS_6StringEEEjEEbPKNS_6VectorIT0_T1_EE
11 152 flatbuffers::Vector , unsigned int>::Get(unsigned int) const call site: 00152
10 430 flatbuffers::BinaryAnnotator::BuildHeader(unsigned long) call site: 00430 bsearch
9 550 flatbuffers::BinaryAnnotator::GetOrBuildVTable(unsigned long, reflection::Object const*, unsigned long) call site: 00550
8 418 std::__1::optional flatbuffers::BinaryAnnotator::ReadScalar (unsigned long) const call site: 00418
6 402 flatbuffers::BinaryAnnotator::IsValidRead(unsigned long, unsigned long) const call site: 00402
6 582 flatbuffers::BinaryAnnotator::GetOrBuildVTable(unsigned long, reflection::Object const*, unsigned long) call site: 00582
6 855 flatbuffers::BinaryAnnotator::BuildVector(unsigned long, reflection::Object const*, reflection::Field const*, unsigned long, std::__1::map , std::__1::allocator > >) call site: 00855
6 887 flatbuffers::BinaryAnnotator::BuildVector(unsigned long, reflection::Object const*, reflection::Field const*, unsigned long, std::__1::map , std::__1::allocator > >) call site: 00887
6 920 flatbuffers::BinaryAnnotator::BuildVector(unsigned long, reflection::Object const*, reflection::Field const*, unsigned long, std::__1::map , std::__1::allocator > >) call site: 00920

Runtime coverage analysis

Covered functions
233
Functions that are reachable but not covered
133
Reachable functions
573
Percentage of reachable functions covered
76.79%
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/flatbuffers/tests/fuzzer/flatbuffers_annotator_fuzzer.cc 1
/src/flatbuffers/tests/fuzzer/../../src/binary_annotator.h 6
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/reflection_generated.h 64
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/buffer.h 14
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/base.h 13
/src/flatbuffers/src/binary_annotator.cpp 19
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/verifier.h 48
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/table.h 41
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector.h 31
/src/flatbuffers/src/binary_annotator.h 30
/usr/local/bin/../include/c++/v1/optional 17
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/string.h 2
/src/flatbuffers/src/reflection.cpp 1
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/reflection.h 2
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/util.h 1

Fuzzer: scalar_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 2266 68.6%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 1033 31.3%
All colors 3299 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
341 932 flatbuffers::Parser::ParseMetaData(flatbuffers::SymbolTable *) call site: 00932 tolower
227 3042 flatbuffers::JsonPrinter::GenStruct(flatbuffers::StructDef const&, flatbuffers::Table const*, int) call site: 03042
212 2827 void flatbuffers::JsonPrinter::GenField (flatbuffers::FieldDef const&, flatbuffers::Table const*, bool, int) call site: 02827 strlen
131 1297 flatbuffers::Parser::AddField(flatbuffers::StructDef&, std::__1::basic_string , std::__1::allocator > const&, flatbuffers::Type const&, flatbuffers::FieldDef**) call site: 01297 strpbrk
109 2285 flatbuffers::Parser::ParseTable(flatbuffers::StructDef const&, std::__1::basic_string , std::__1::allocator >*, unsigned int*) call site: 02285 _ZN11flatbuffers21FlatBufferBuilderImplILb0EE15CalculateOffsetIjEENSt3__19enable_ifIXsr3std7is_sameIT_jEE5valueES5_E4typeEv
66 270 flatbuffers::CheckedError::CheckedError(flatbuffers::CheckedError const&) call site: 00270
61 2422 flatbuffers::Parser::ParseAnyValue(flatbuffers::Value&, flatbuffers::FieldDef*, unsigned long, flatbuffers::StructDef const*, unsigned long, bool) call site: 02422
57 1542 flatbuffers::Parser::DoParse(char const*, char const**, char const*, char const*) call site: 01542
57 2028 std::__1::enable_if ::type flatbuffers::FlatBufferBuilderImpl ::GetSizeRelative32BitRegion () const call site: 02028
54 528 flatbuffers::Parser::StartStruct(std::__1::basic_string , std::__1::allocator > const&, flatbuffers::StructDef**) call site: 00528
53 353 flatbuffers::strtoval_impl(double*, char const*, char**) call site: 00353
35 457 flatbuffers::Parser::DoParse(char const*, char const**, char const*, char const*) call site: 00457

Runtime coverage analysis

Covered functions
385
Functions that are reachable but not covered
1048
Reachable functions
1922
Percentage of reachable functions covered
45.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/flatbuffers/tests/fuzzer/flatbuffers_scalar_fuzzer.cc 18
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/idl.h 105
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/buffer.h 29
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flatbuffer_builder.h 92
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector_downward.h 33
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/default_allocator.h 7
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/allocator.h 4
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flexbuffers.h 121
/src/flatbuffers/src/idl_parser.cpp 177
/src/flatbuffers/src/util.cpp 18
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/util.h 47
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/base.h 35
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/hash.h 4
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/reflection.h 1
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector.h 57
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/table.h 30
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/string.h 2
/src/flatbuffers/tests/fuzzer/../../tests/test_assert.h 2
/src/flatbuffers/tests/test_assert.cpp 2
/src/flatbuffers/tests/fuzzer/test_init.h 1
/src/flatbuffers/src/idl_gen_text.cpp 89
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/struct.h 11
/usr/local/bin/../include/c++/v1/optional 20
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/array.h 44

Fuzzer: 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 595 23.1%
gold [1:9] 66 2.57%
yellow [10:29] 27 1.05%
greenyellow [30:49] 31 1.20%
lawngreen 50+ 1846 71.9%
All colors 2565 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
158 1050 flatbuffers::EnumValBuilder::~EnumValBuilder() call site: 01050 tolower
131 1232 flatbuffers::Parser::AddField(flatbuffers::StructDef&, std::__1::basic_string , std::__1::allocator > const&, flatbuffers::Type const&, flatbuffers::FieldDef**) call site: 01232 strpbrk
47 923 flatbuffers::Parser::ParseEnum(bool, flatbuffers::EnumDef**, char const*) call site: 00923
19 463 flatbuffers::Parser::StartStruct(std::__1::basic_string , std::__1::allocator > const&, flatbuffers::StructDef**) call site: 00463
17 1828 flatbuffers::Parser::CheckPrivateLeak() call site: 01828
14 413 flatbuffers::Parser::ParseNamespace() call site: 00413
14 2504 flatbuffers::Parser::Parse(char const*, char const**, char const*) call site: 02504 _ZN11flatbuffers21FlatBufferBuilderImplILb0EE12CreateVectorIhTtTpTyENS_6OffsetETtTpTyENS_6VectorEEET0_IJT1_IJT_EEEEPKS7_m
12 2490 flatbuffers::Parser::ParseVector(flatbuffers::Type const&, unsigned int*, flatbuffers::FieldDef*, unsigned long) call site: 02490
11 1395 flatbuffers::Parser::DoParse(char const*, char const**, char const*, char const*) call site: 01395
9 500 flatbuffers::Parser::ParseEnum(bool, flatbuffers::EnumDef**, char const*) call site: 00500
9 1003 flatbuffers::Parser::ParseEnum(bool, flatbuffers::EnumDef**, char const*) call site: 01003
7 2 LLVMFuzzerTestOneInput call site: 00002

Runtime coverage analysis

Covered functions
541
Functions that are reachable but not covered
152
Reachable functions
1223
Percentage of reachable functions covered
87.57%
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/flatbuffers/tests/fuzzer/flatbuffers_parser_fuzzer.cc 1
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/idl.h 105
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/buffer.h 15
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flatbuffer_builder.h 92
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector_downward.h 33
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/default_allocator.h 7
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/allocator.h 4
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flexbuffers.h 50
/src/flatbuffers/src/idl_parser.cpp 176
/src/flatbuffers/src/util.cpp 18
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/util.h 43
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/base.h 35
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/hash.h 4
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/reflection.h 1
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector.h 11
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/table.h 4
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/string.h 1

Fuzzer: monster_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 1693 47.0%
gold [1:9] 52 1.44%
yellow [10:29] 20 0.55%
greenyellow [30:49] 14 0.38%
lawngreen 50+ 1821 50.5%
All colors 3600 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
494 1402 flatbuffers::EnumDef::EnumDef() call site: 01402 tolower
251 2211 flatbuffers::Parser::ParseDecl(char const*) call site: 02211 strlen
139 1897 flatbuffers::FieldDef::FieldDef() call site: 01897 strpbrk
82 3505 flatbuffers::Vector , unsigned int>::Get(unsigned int) const call site: 03505
57 2150 flatbuffers::Parser::DoParse(char const*, char const**, char const*, char const*) call site: 02150
38 3317 flexbuffers::Reference::ToString(bool, bool, std::__1::basic_string , std::__1::allocator >&, bool, int, char const*, bool) const call site: 03317
35 1355 flatbuffers::StructDef* flatbuffers::(anonymous namespace)::LookupTableByName (flatbuffers::SymbolTable const&, std::__1::basic_string , std::__1::allocator > const&, flatbuffers::Namespace const&, unsigned long) call site: 01355
34 1005 flatbuffers::Parser::ParseFunction(std::__1::basic_string , std::__1::allocator > const*, flatbuffers::Value&) call site: 01005
32 2047 flatbuffers::Parser::DoParse(char const*, char const**, char const*, char const*) call site: 02047
31 955 flatbuffers::Parser::ParseSingleValue(std::__1::basic_string , std::__1::allocator > const*, flatbuffers::Value&, bool) call site: 00955
31 1317 flatbuffers::Parser::UniqueNamespace(flatbuffers::Namespace*) call site: 01317
18 2093 flatbuffers::Parser::DoParse(char const*, char const**, char const*, char const*) call site: 02093

Runtime coverage analysis

Covered functions
967
Functions that are reachable but not covered
561
Reachable functions
2227
Percentage of reachable functions covered
74.81%
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/flatbuffers/tests/fuzzer/flatbuffers_monster_fuzzer.cc 2
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/idl.h 105
/src/flatbuffers/src/idl_parser.cpp 177
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flatbuffer_builder.h 92
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector_downward.h 33
/src/flatbuffers/src/util.cpp 18
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/util.h 47
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flexbuffers.h 139
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/base.h 35
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/default_allocator.h 7
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/allocator.h 4
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/buffer.h 35
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/reflection.h 1
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector.h 69
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/hash.h 4
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/table.h 73
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/string.h 2
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/verifier.h 55
/src/flatbuffers/tests/fuzzer/../../tests/cpp17/generated_cpp17/monster_test_generated.h 42
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flex_flat_util.h 1
/src/flatbuffers/tests/fuzzer/../../tests/test_assert.h 3
/src/flatbuffers/tests/test_assert.cpp 2
/src/flatbuffers/src/idl_gen_text.cpp 89
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/struct.h 11
/usr/local/bin/../include/c++/v1/optional 20
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/array.h 44

Analyses and suggestions

Optimal target analysis

Remaining optimal interesting functions

The following table shows a list of functions that are optimal targets. Optimal targets are identified by finding the functions that in combination, yield a high code coverage.

Func name Functions filename Arg count Args Function depth hitcount instr count bb count cyclomatic complexity Reachable functions Incoming references total cyclomatic complexity Unreached complexity
flatbuffers::Parser::Serialize() /src/flatbuffers/src/idl_parser.cpp 1 ['N/A'] 18 0 630 90 64 729 0 1113 693
flatbuffers::Parser::Deserialize(unsignedcharconst*,unsignedlong) /src/flatbuffers/src/idl_parser.cpp 3 ['N/A', 'N/A', 'size_t'] 12 0 86 15 6 513 0 894 377
flatbuffers::CopyTable(flatbuffers::FlatBufferBuilderImpl &,reflection::Schemaconst&,reflection::Objectconst&,flatbuffers::Tableconst&,bool) /src/flatbuffers/src/reflection.cpp 5 ['N/A', 'N/A', 'N/A', 'N/A', 'bool'] 14 0 852 170 95 366 1 629 302
flatbuffers::(anonymousnamespace)::VerifyObject(flatbuffers::VerifierTemplate &,reflection::Schemaconst&,reflection::Objectconst&,flatbuffers::Tableconst*,bool) /src/flatbuffers/src/reflection.cpp 5 ['N/A', 'N/A', 'N/A', 'N/A', 'bool'] 13 0 361 67 19 304 5 472 191
flatbuffers::Parser::ConformTo(flatbuffers::Parserconst&) /src/flatbuffers/src/idl_parser.cpp 3 ['N/A', 'N/A', 'N/A'] 2 0 734 129 114 22 0 179 129
flatbuffers::GetAnyValueS(reflection::BaseType,unsignedcharconst*,reflection::Schemaconst*,int) /src/flatbuffers/src/reflection.cpp 5 ['N/A', 'int', 'N/A', 'N/A', 'int'] 9 0 305 63 46 171 2 337 99
flatbuffers::BinaryAnnotator::BuildStruct(unsignedlong,std::__1::vector >&,std::__1::basic_string ,std::__1::allocator >,reflection::Objectconst*)::$_0::operator()(reflection::Fieldconst*)const /src/flatbuffers/src/binary_annotator.cpp 2 ['N/A', 'N/A'] 9 0 896 142 91 134 0 285 91

Implementing fuzzers that target the above functions will improve reachability such that it becomes:

Functions statically reachable by fuzzers
92.0%
1846 / 2001
Cyclomatic complexity statically reachable by fuzzers
95.0%
14620 / 15376

All functions overview

If you implement fuzzers for these functions, the status of all functions in the project will be:

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

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/flatbuffers/tests/fuzzer/flexbuffers_verifier_fuzzer.cc

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=['flexbuffers::Vector::operator[](unsigned long) const']

/src/flatbuffers/tests/fuzzer/flatbuffers_verifier_fuzzer.cc

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=['flexbuffers::VerifyBuffer(unsigned char const*, unsigned long, std::__1::vector >*)', 'flexbuffers::Vector::operator[](unsigned long) const']

/src/flatbuffers/tests/fuzzer/flatbuffers_64bit_fuzzer.cc

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=['flatbuffers::AccessBuffer(unsigned char const*, unsigned long, bool)', 'bool flatbuffers::VerifierTemplate::VerifyBufferFromStart(char const*, unsigned long)']

/src/flatbuffers/tests/fuzzer/flatbuffers_annotator_fuzzer.cc

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=['flatbuffers::Vector, unsigned int>::Get(unsigned int) const', 'flatbuffers::Vector, unsigned int>::Get(unsigned int) const', 'flatbuffers::Vector, unsigned int>::Get(unsigned int) const', 'flatbuffers::Vector, unsigned int>::Get(unsigned int) const', 'flatbuffers::BinaryAnnotator::BuildHeader(unsigned long)', 'flatbuffers::BinaryAnnotator::GetOrBuildVTable(unsigned long, reflection::Object const*, unsigned long)', 'std::__1::optional flatbuffers::BinaryAnnotator::ReadScalar(unsigned long) const', 'flatbuffers::BinaryAnnotator::IsValidRead(unsigned long, unsigned long) const', 'flatbuffers::BinaryAnnotator::GetOrBuildVTable(unsigned long, reflection::Object const*, unsigned long)', 'flatbuffers::BinaryAnnotator::BuildVector(unsigned long, reflection::Object const*, reflection::Field const*, unsigned long, std::__1::map, std::__1::allocator > >)']

/src/flatbuffers/tests/fuzzer/flatbuffers_scalar_fuzzer.cc

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=['flatbuffers::Parser::ParseMetaData(flatbuffers::SymbolTable*)', 'flatbuffers::JsonPrinter::GenStruct(flatbuffers::StructDef const&, flatbuffers::Table const*, int)', 'void flatbuffers::JsonPrinter::GenField(flatbuffers::FieldDef const&, flatbuffers::Table const*, bool, int)', 'flatbuffers::Parser::AddField(flatbuffers::StructDef&, std::__1::basic_string, std::__1::allocator > const&, flatbuffers::Type const&, flatbuffers::FieldDef**)', 'flatbuffers::Parser::ParseTable(flatbuffers::StructDef const&, std::__1::basic_string, std::__1::allocator >*, unsigned int*)', 'flatbuffers::CheckedError::CheckedError(flatbuffers::CheckedError const&)', 'flatbuffers::Parser::ParseAnyValue(flatbuffers::Value&, flatbuffers::FieldDef*, unsigned long, flatbuffers::StructDef const*, unsigned long, bool)', 'flatbuffers::Parser::DoParse(char const*, char const**, char const*, char const*)', 'std::__1::enable_if::type flatbuffers::FlatBufferBuilderImpl::GetSizeRelative32BitRegion() const', 'flatbuffers::Parser::StartStruct(std::__1::basic_string, std::__1::allocator > const&, flatbuffers::StructDef**)']

/src/flatbuffers/tests/fuzzer/flatbuffers_parser_fuzzer.cc

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=['flatbuffers::EnumValBuilder::~EnumValBuilder()', 'flatbuffers::Parser::AddField(flatbuffers::StructDef&, std::__1::basic_string, std::__1::allocator > const&, flatbuffers::Type const&, flatbuffers::FieldDef**)', 'flatbuffers::Parser::ParseEnum(bool, flatbuffers::EnumDef**, char const*)', 'flatbuffers::Parser::StartStruct(std::__1::basic_string, std::__1::allocator > const&, flatbuffers::StructDef**)', 'flatbuffers::Parser::CheckPrivateLeak()', 'flatbuffers::Parser::ParseNamespace()', 'flatbuffers::Parser::Parse(char const*, char const**, char const*)', 'flatbuffers::Parser::ParseVector(flatbuffers::Type const&, unsigned int*, flatbuffers::FieldDef*, unsigned long)', 'flatbuffers::Parser::DoParse(char const*, char const**, char const*, char const*)', 'flatbuffers::Parser::ParseEnum(bool, flatbuffers::EnumDef**, char const*)']

/src/flatbuffers/tests/fuzzer/flatbuffers_monster_fuzzer.cc

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=['flatbuffers::EnumDef::EnumDef()', 'flatbuffers::Parser::ParseDecl(char const*)', 'flatbuffers::FieldDef::FieldDef()', 'flatbuffers::Vector, unsigned int>::Get(unsigned int) const', 'flatbuffers::Parser::DoParse(char const*, char const**, char const*, char const*)', 'flexbuffers::Reference::ToString(bool, bool, std::__1::basic_string, std::__1::allocator >&, bool, int, char const*, bool) const', 'flatbuffers::StructDef* flatbuffers::(anonymous namespace)::LookupTableByName(flatbuffers::SymbolTable const&, std::__1::basic_string, std::__1::allocator > const&, flatbuffers::Namespace const&, unsigned long)', 'flatbuffers::Parser::ParseFunction(std::__1::basic_string, std::__1::allocator > const*, flatbuffers::Value&)', 'flatbuffers::Parser::DoParse(char const*, char const**, char const*, char const*)', 'flatbuffers::Parser::ParseSingleValue(std::__1::basic_string, std::__1::allocator > const*, flatbuffers::Value&, bool)']

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
flatbuffers::BinaryAnnotator::BuildHeader(unsignedlong) 58 31 53.44% ['annotator_fuzzer']
voidflatbuffers::JsonPrinter::PrintScalar (signedchar,flatbuffers::Typeconst&,int) 36 14 38.88% ['monster_fuzzer', 'scalar_fuzzer']
voidflatbuffers::JsonPrinter::PrintScalar (short,flatbuffers::Typeconst&,int) 36 6 16.66% ['monster_fuzzer', 'scalar_fuzzer']
voidflatbuffers::JsonPrinter::PrintScalar (unsignedshort,flatbuffers::Typeconst&,int) 36 6 16.66% ['monster_fuzzer', 'scalar_fuzzer']
voidflatbuffers::JsonPrinter::PrintScalar (int,flatbuffers::Typeconst&,int) 36 6 16.66% ['monster_fuzzer', 'scalar_fuzzer']
voidflatbuffers::JsonPrinter::PrintScalar (unsignedint,flatbuffers::Typeconst&,int) 36 6 16.66% ['monster_fuzzer', 'scalar_fuzzer']
voidflatbuffers::JsonPrinter::PrintScalar (long,flatbuffers::Typeconst&,int) 36 6 16.66% ['monster_fuzzer', 'scalar_fuzzer']
voidflatbuffers::JsonPrinter::PrintScalar (float,flatbuffers::Typeconst&,int) 36 6 16.66% ['monster_fuzzer', 'scalar_fuzzer']
voidflatbuffers::JsonPrinter::PrintScalar (double,flatbuffers::Typeconst&,int) 36 6 16.66% ['monster_fuzzer', 'scalar_fuzzer']
flatbuffers::Parser::ParseRoot(charconst*,charconst**,charconst*) 76 35 46.05% ['monster_fuzzer', 'parser_fuzzer', 'scalar_fuzzer']
flatbuffers::Parser::CheckPrivateLeak() 40 2 5.0% ['monster_fuzzer', 'parser_fuzzer', 'scalar_fuzzer']
flatbuffers::JsonPrinter::PrintOffset(voidconst*,flatbuffers::Typeconst&,int,unsignedcharconst*,int) 59 30 50.84% ['monster_fuzzer', 'scalar_fuzzer']

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/flatbuffers/tests/fuzzer/flexbuffers_verifier_fuzzer.cc ['flexverifier_fuzzer'] ['flexverifier_fuzzer']
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/idl.h ['scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/reflection.h ['annotator_fuzzer', 'scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/usr/local/bin/../include/c++/v1/sstream [] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/struct.h ['scalar_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../tests/64bit/test_64bit_generated.h ['64bit_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/base.h ['flexverifier_fuzzer', 'verifier_fuzzer', '64bit_fuzzer', 'annotator_fuzzer', 'scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/src/util.cpp ['scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] ['scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer']
/usr/local/bin/../include/c++/v1/__exception/exception.h [] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/array.h ['scalar_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector.h ['verifier_fuzzer', '64bit_fuzzer', 'annotator_fuzzer', 'scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/usr/local/bin/../include/c++/v1/stdexcept [] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/code_generator.h [] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/buffer.h ['verifier_fuzzer', '64bit_fuzzer', 'annotator_fuzzer', 'scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flatbuffer_builder.h ['scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/flatbuffers_verifier_fuzzer.cc ['verifier_fuzzer'] ['verifier_fuzzer']
/src/flatbuffers/tests/fuzzer/../../tests/test_assert.h ['64bit_fuzzer', 'scalar_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/src/binary_annotator.h ['annotator_fuzzer'] ['annotator_fuzzer']
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/default_allocator.h ['scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/string.h ['64bit_fuzzer', 'annotator_fuzzer', 'scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/src/binary_annotator.cpp ['annotator_fuzzer'] ['annotator_fuzzer']
/src/flatbuffers/tests/fuzzer/test_init.h ['scalar_fuzzer'] ['scalar_fuzzer']
/src/flatbuffers/tests/fuzzer/flatbuffers_monster_fuzzer.cc ['monster_fuzzer'] ['monster_fuzzer']
/usr/local/bin/../include/c++/v1/optional ['annotator_fuzzer', 'scalar_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/allocator.h ['scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/verifier.h ['verifier_fuzzer', '64bit_fuzzer', 'annotator_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/hash.h ['scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/flatbuffers_64bit_fuzzer.cc ['64bit_fuzzer'] ['64bit_fuzzer']
/src/flatbuffers/src/idl_parser.cpp ['scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] ['scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer']
/src/flatbuffers/tests/fuzzer/../../tests/cpp17/generated_cpp17/monster_test_generated.h ['verifier_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../src/binary_annotator.h ['annotator_fuzzer'] ['annotator_fuzzer']
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/table.h ['verifier_fuzzer', '64bit_fuzzer', 'annotator_fuzzer', 'scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/test_assert.cpp ['64bit_fuzzer', 'scalar_fuzzer', 'monster_fuzzer'] ['64bit_fuzzer', 'scalar_fuzzer', 'monster_fuzzer']
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flexbuffers.h ['flexverifier_fuzzer', 'verifier_fuzzer', 'scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/usr/local/bin/../include/c++/v1/string [] []
/src/flatbuffers/src/idl_gen_text.cpp ['scalar_fuzzer', 'monster_fuzzer'] ['scalar_fuzzer', 'monster_fuzzer']
/src/flatbuffers/tests/fuzzer/flatbuffers_scalar_fuzzer.cc ['scalar_fuzzer'] ['scalar_fuzzer']
/src/flatbuffers/tests/fuzzer/flatbuffers_annotator_fuzzer.cc ['annotator_fuzzer'] ['annotator_fuzzer']
/src/flatbuffers/tests/fuzzer/../../tests/64bit/test_64bit_bfbs_generated.h [] []
/src/flatbuffers/tests/fuzzer/flatbuffers_parser_fuzzer.cc ['parser_fuzzer'] ['parser_fuzzer']
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/reflection_generated.h ['annotator_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/util.h ['64bit_fuzzer', 'annotator_fuzzer', 'scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/flex_flat_util.h ['verifier_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/vector_downward.h ['scalar_fuzzer', 'parser_fuzzer', 'monster_fuzzer'] []
/src/flatbuffers/src/reflection.cpp ['annotator_fuzzer'] ['annotator_fuzzer']

Directories in report

Directory
/src/flatbuffers/tests/fuzzer/../../include/flatbuffers/
/src/flatbuffers/tests/fuzzer/../../src/
/usr/local/bin/../include/c++/v1/
/src/flatbuffers/src/
/usr/local/bin/../include/c++/v1/__exception/
/src/flatbuffers/tests/fuzzer/../../tests/
/src/flatbuffers/tests/fuzzer/
/src/flatbuffers/tests/fuzzer/../../tests/64bit/
/src/flatbuffers/tests/
/src/flatbuffers/tests/fuzzer/../../tests/cpp17/generated_cpp17/