Fuzz introspector
For issues and ideas: https://github.com/ossf/fuzz-introspector/issues
Report generation date: 2025-01-23

Project overview: monero

High level conclusions

Reachability and coverage overview

Functions statically reachable by fuzzers
25.0%
8675 / 34538
Cyclomatic complexity statically reachable by fuzzers
24.0%
44437 / 182421
Runtime code coverage of functions
15.0%
5098 / 34538

Fuzzers overview

Fuzzer Fuzzer filename Functions Reached Functions unreached Fuzzer depth Files reached Basic blocks reached Cyclomatic complexity Details
parse-url_fuzz_tests /src/monero/monero/tests/fuzz/parse_url.cpp 824 662 24 40 4203 2503 parse_url.cpp
base58_fuzz_tests /src/monero/monero/tests/fuzz/base58.cpp 20 543 4 3 80 41 base58.cpp
bulletproof_fuzz_tests /src/monero/monero/tests/fuzz/bulletproof.cpp 96 517 11 10 244 183 bulletproof.cpp
levin_fuzz_tests /src/monero/monero/tests/fuzz/levin.cpp 1507 973 17 108 4527 3245 levin.cpp
http-client_fuzz_tests /src/monero/monero/tests/fuzz/http-client.cpp 940 3257 26 60 4830 3055 http-client.cpp
load-from-binary_fuzz_tests /src/monero/monero/tests/fuzz/load_from_binary.cpp 1376 2744 18 25 4683 3288 load_from_binary.cpp
tx-extra_fuzz_tests /src/monero/monero/tests/fuzz/tx-extra.cpp 1113 5713 17 26 3152 2318 tx-extra.cpp
transaction_fuzz_tests /src/monero/monero/tests/fuzz/transaction.cpp 2311 5078 33 52 7176 5070 transaction.cpp
block_fuzz_tests /src/monero/monero/tests/fuzz/block.cpp 2222 5146 35 46 6970 4831 block.cpp
load-from-json_fuzz_tests /src/monero/monero/tests/fuzz/load_from_json.cpp 4043 1313 24 39 11695 8942 load_from_json.cpp
signature_fuzz_tests /src/monero/monero/tests/fuzz/signature.cpp 12296 28694 42 226 44052 30310 signature.cpp
cold-outputs_fuzz_tests /src/monero/monero/tests/fuzz/cold-outputs.cpp 13195 28228 42 227 45850 31866 cold-outputs.cpp
cold-transaction_fuzz_tests /src/monero/monero/tests/fuzz/cold-transaction.cpp 14885 27317 42 242 56796 39512 cold-transaction.cpp

Fuzzer details

Fuzzer: parse-url_fuzz_tests

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 581 68.1%
gold [1:9] 4 0.46%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 268 31.4%
All colors 853 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
44 118 11 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::unordered_map , std::__1::allocator >, std::__1::hash , std::__1::equal_to , std::__1::allocator , std::__1::allocator > > > >::empty[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_ostream >& std::__1::operator<<[abi:ne180100] >(std::__1::basic_ostream >&, char const*)', 'el::base::utils::File::extractPathFromFilename(std::__1::basic_string , std::__1::allocator > const&, char const*)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::empty[abi:ne180100]() const', 'el::base::TypedConfigurations::resolveFilename(std::__1::basic_string , std::__1::allocator > const&)', 'el::base::TypedConfigurations::insertFile(el::Level, std::__1::basic_string , std::__1::allocator > const&)::$_0::operator()(el::Level) const', 'std::__1::basic_string , std::__1::allocator >::empty[abi:ne180100]() const', 'el::LevelHelper::convertToString(el::Level)', 'el::base::utils::File::createPath(std::__1::basic_string , std::__1::allocator > const&)']

44 118 el::base::TypedConfigurations::insertFile(el::Level,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1886
14 14 13 :

['std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >&>::type, std::__1::__unwrap_ref_decay , std::__1::allocator > >::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator > >(std::__1::basic_string , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator >&&)', 'el::base::utils::CommandLineArgs::hasParamWithValue(char const*) const', 'el::base::utils::CommandLineArgs::hasParam(char const*) const', '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8ne180100ILi0EEEPKc', 'std::__1::basic_string , std::__1::allocator >::substr[abi:ne180100](unsigned long, unsigned long) const', 'std::__1::vector , std::__1::allocator >, std::__1::allocator , std::__1::allocator > > >::push_back[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void*>*> >, bool> std::__1::unordered_map , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >, std::__1::hash , std::__1::allocator > >, std::__1::equal_to , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, std::__1::basic_string , std::__1::allocator > > > >::insert[abi:ne180100] , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void>(std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >::~pair()', 'strstr', 'std::__1::basic_string , std::__1::allocator >::operator=[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::basic_string , std::__1::allocator >::find_first_of[abi:ne180100](char, unsigned long) const']

14 14 el::base::utils::CommandLineArgs::setArgs(int,char**) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1426
12 20 13 :

['std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int const&>(std::__1::basic_string , std::__1::allocator > const&, int const&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rbegin[abi:ne180100]()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int>(std::__1::basic_string , std::__1::allocator > const&, int&&)', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator->[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >, int>::~pair()', 'el::base::priority(el::Level)', 'bool std::__1::operator!=[abi:ne180100] , std::__1::allocator >, el::Level> const*>, std::__1::__wrap_iter , std::__1::allocator >, el::Level>*> >(std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> > const&, std::__1::reverse_iterator , std::__1::allocator >, el::Level>*> > const&)', '_ZNSt3__116reverse_iteratorINS_11__wrap_iterIPKNS_4pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN2el5LevelEEEEEEC2B8ne180100INS1_IPSB_EEvEERKNS0_IT_EE', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator++[abi:ne180100]()', 'el::base::utils::Str::wildCardMatch(char const*, char const*)', 'std::__1::pair , std::__1::allocator >, int>, std::__1::__tree_node , std::__1::allocator >, int>, void*>*, long> >, bool> std::__1::map , std::__1::allocator >, int, std::__1::less , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, int> > >::insert[abi:ne180100] , std::__1::allocator >, int>, void>(std::__1::pair , std::__1::allocator >, int>&&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rend[abi:ne180100]()']

12 20 el::base::VRegistry::priority_allowed(int,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2227
10 10 5 :

['std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)', '__clang_call_terminate', '__cxa_rethrow', '__cxa_end_catch', '__cxa_begin_catch']

10 10 el::base::LogFormat⪙::base::TypedConfigurations::unsafeGetConfigByRef (el::Level,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,charconst*) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2022
0 34 1 :

['el::Configurations::unsafeSet(el::Level, el::ConfigurationType, std::__1::basic_string , std::__1::allocator > const&)']

0 38 el::Configurations::unsafeSetGlobally(el::ConfigurationType,std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:650
0 3 2 :

['el::base::LogFormat::operator=(el::base::LogFormat const&)', 'std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)']

0 3 voidel::base::TypedConfigurations::setValue (el::Level,el::base::LogFormatconst&,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2050
0 0 None 4 4 el::base::TypedConfigurations::getULong(std::__1::basic_string ,std::__1::allocator >) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1838
0 0 None 2 556 el::base::RegisteredLoggers::get(std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2000
0 0 None 0 514 el::Logger::configure(el::Configurationsconst&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:748
0 0 1 :

['std::__1::__map_const_iterator , std::__1::allocator >, int>, std::__1::__tree_node , std::__1::allocator >, int>, void*>*, long> >::operator->[abi:ne180100]() const']

0 0 el::base::VRegistry::priority_allowed(int,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2225
0 0 None 0 0 el::base::priority(el::Level) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2132
0 0 9 :

['std::__1::shared_ptr > >::operator=[abi:ne180100](std::__1::shared_ptr > > const&)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::at(el::Level const&)', 'std::__1::__hash_map_iterator > > >, void*>*> >::operator->[abi:ne180100]() const', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::find[abi:ne180100](el::Level const&)', 'std::__1::operator!=[abi:ne180100](std::__1::__hash_map_iterator > > >, void*>*> > const&, std::__1::__hash_map_iterator > > >, void*>*> > const&)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::end[abi:ne180100]()', 'bool std::__1::operator==[abi:ne180100] >, std::__1::basic_fstream > >(std::__1::shared_ptr > > const&, std::__1::shared_ptr > > const&)', 'std::__1::operator==[abi:ne180100](std::__1::__hash_map_iterator > > >, void*>*> > const&, std::__1::__hash_map_iterator > > >, void*>*> > const&)', 'std::__1::pair ::type, std::__1::__unwrap_ref_decay > > const&>::type> std::__1::make_pair[abi:ne180100] > > const&>(el::Level&, std::__1::shared_ptr > > const&)']

0 0 voidel::base::TypedConfigurations::setValue >>>(el::Level,std::__1::shared_ptr >>const&,std::__1::unordered_map >>,std::__1::hash ,std::__1::equal_to ,std::__1::allocator >>>>>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2039

Runtime coverage analysis

Covered functions
151
Functions that are reachable but not covered
612
Reachable functions
824
Percentage of reachable functions covered
25.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/monero/monero/tests/fuzz/parse_url.cpp 1
/src/monero/monero/contrib/epee/include/net/http_base.h 4
/src/monero/monero/contrib/epee/src/net_parse_helpers.cpp 4
/src/monero/monero/contrib/epee/include/reg_exp_definer.h 1
/src/monero/monero/contrib/epee/include/syncobj.h 2
/usr/local/include/boost/thread/pthread/recursive_mutex.hpp 2
/usr/local/include/boost/regex/v5/basic_regex.hpp 36
/usr/local/include/boost/regex/v5/cpp_regex_traits.hpp 25
/usr/local/include/boost/regex/v5/regex_traits.hpp 2
/usr/local/include/boost/regex/v5/object_cache.hpp 4
/usr/local/include/boost/regex/v5/pattern_except.hpp 4
/usr/local/include/boost/throw_exception.hpp 21
/usr/local/include/boost/exception/exception.hpp 7
/usr/local/include/boost/regex/v5/regex_traits_defaults.hpp 6
/usr/local/include/boost/regex/v5/primary_transform.hpp 2
/usr/local/include/boost/regex/v5/regex_raw_buffer.hpp 7
/usr/local/include/boost/regex/v5/basic_regex_parser.hpp 7
/usr/local/include/boost/regex/v5/basic_regex_creator.hpp 24
/usr/local/include/boost/regex/v5/perl_matcher.hpp 8
/usr/local/include/boost/regex/v5/match_results.hpp 8
/usr/local/include/boost/regex/v5/sub_match.hpp 6
/usr/local/include/boost/regex/v5/regex_search.hpp 3
/usr/local/include/boost/regex/v5/perl_matcher_common.hpp 4
/usr/local/bin/../include/c++/v1/stdexcept 2
/usr/local/include/boost/regex/v5/match_flags.hpp 4
/usr/local/include/boost/regex/v5/perl_matcher_non_recursive.hpp 4
/usr/local/include/boost/regex/v5/mem_block_cache.hpp 6
/src/monero/monero/external/easylogging++/easylogging++.cc 78
/src/monero/monero/external/easylogging++/easylogging++.h 98
/usr/include/stdlib.h 1
/usr/include/x86_64-linux-gnu/sys/stat.h 1
/usr/local/include/boost/lexical_cast.hpp 1
/usr/local/include/boost/lexical_cast/try_lexical_convert.hpp 1
/usr/local/include/boost/lexical_cast/detail/converter_lexical.hpp 1
/usr/local/include/boost/lexical_cast/detail/converter_lexical_streams.hpp 10
/usr/local/include/boost/detail/basic_pointerbuf.hpp 2
/usr/local/include/boost/lexical_cast/detail/lcast_unsigned_converters.hpp 4
/usr/local/include/boost/lexical_cast/bad_lexical_cast.hpp 3
/usr/local/bin/../include/c++/v1/typeinfo 1
/usr/local/bin/../include/c++/v1/__exception/exception.h 1

Fuzzer: base58_fuzz_tests

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+ 16 100.%
All colors 16 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
44 118 11 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::unordered_map , std::__1::allocator >, std::__1::hash , std::__1::equal_to , std::__1::allocator , std::__1::allocator > > > >::empty[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_ostream >& std::__1::operator<<[abi:ne180100] >(std::__1::basic_ostream >&, char const*)', 'el::base::utils::File::extractPathFromFilename(std::__1::basic_string , std::__1::allocator > const&, char const*)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::empty[abi:ne180100]() const', 'el::base::TypedConfigurations::resolveFilename(std::__1::basic_string , std::__1::allocator > const&)', 'el::base::TypedConfigurations::insertFile(el::Level, std::__1::basic_string , std::__1::allocator > const&)::$_0::operator()(el::Level) const', 'std::__1::basic_string , std::__1::allocator >::empty[abi:ne180100]() const', 'el::LevelHelper::convertToString(el::Level)', 'el::base::utils::File::createPath(std::__1::basic_string , std::__1::allocator > const&)']

44 118 el::base::TypedConfigurations::insertFile(el::Level,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1886
14 14 13 :

['std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >&>::type, std::__1::__unwrap_ref_decay , std::__1::allocator > >::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator > >(std::__1::basic_string , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator >&&)', 'el::base::utils::CommandLineArgs::hasParamWithValue(char const*) const', 'el::base::utils::CommandLineArgs::hasParam(char const*) const', '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8ne180100ILi0EEEPKc', 'std::__1::basic_string , std::__1::allocator >::substr[abi:ne180100](unsigned long, unsigned long) const', 'std::__1::vector , std::__1::allocator >, std::__1::allocator , std::__1::allocator > > >::push_back[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void*>*> >, bool> std::__1::unordered_map , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >, std::__1::hash , std::__1::allocator > >, std::__1::equal_to , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, std::__1::basic_string , std::__1::allocator > > > >::insert[abi:ne180100] , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void>(std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >::~pair()', 'strstr', 'std::__1::basic_string , std::__1::allocator >::operator=[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::basic_string , std::__1::allocator >::find_first_of[abi:ne180100](char, unsigned long) const']

14 14 el::base::utils::CommandLineArgs::setArgs(int,char**) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1426
10 10 5 :

['std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)', '__clang_call_terminate', '__cxa_rethrow', '__cxa_end_catch', '__cxa_begin_catch']

10 10 el::base::LogFormat⪙::base::TypedConfigurations::unsafeGetConfigByRef (el::Level,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,charconst*) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2022
0 34 1 :

['el::Configurations::unsafeSet(el::Level, el::ConfigurationType, std::__1::basic_string , std::__1::allocator > const&)']

0 38 el::Configurations::unsafeSetGlobally(el::ConfigurationType,std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:650
0 3 2 :

['el::base::LogFormat::operator=(el::base::LogFormat const&)', 'std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)']

0 3 voidel::base::TypedConfigurations::setValue (el::Level,el::base::LogFormatconst&,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2050
0 0 None 4 4 el::base::TypedConfigurations::getULong(std::__1::basic_string ,std::__1::allocator >) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1838
0 0 None 2 556 el::base::RegisteredLoggers::get(std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2000
0 0 None 0 514 el::Logger::configure(el::Configurationsconst&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:748
0 0 9 :

['std::__1::shared_ptr > >::operator=[abi:ne180100](std::__1::shared_ptr > > const&)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::at(el::Level const&)', 'std::__1::__hash_map_iterator > > >, void*>*> >::operator->[abi:ne180100]() const', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::find[abi:ne180100](el::Level const&)', 'std::__1::operator!=[abi:ne180100](std::__1::__hash_map_iterator > > >, void*>*> > const&, std::__1::__hash_map_iterator > > >, void*>*> > const&)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::end[abi:ne180100]()', 'bool std::__1::operator==[abi:ne180100] >, std::__1::basic_fstream > >(std::__1::shared_ptr > > const&, std::__1::shared_ptr > > const&)', 'std::__1::operator==[abi:ne180100](std::__1::__hash_map_iterator > > >, void*>*> > const&, std::__1::__hash_map_iterator > > >, void*>*> > const&)', 'std::__1::pair ::type, std::__1::__unwrap_ref_decay > > const&>::type> std::__1::make_pair[abi:ne180100] > > const&>(el::Level&, std::__1::shared_ptr > > const&)']

0 0 voidel::base::TypedConfigurations::setValue >>>(el::Level,std::__1::shared_ptr >>const&,std::__1::unordered_map >>,std::__1::hash ,std::__1::equal_to ,std::__1::allocator >>>>>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2039
0 0 1 :

['std::__1::basic_string , std::__1::allocator >::clear[abi:ne180100]()']

0 0 tools::base58::decode(std::__1::basic_string ,std::__1::allocator >const&,std::__1::basic_string ,std::__1::allocator >&) call site: 00000 /src/monero/monero/src/common/base58.cpp:197

Runtime coverage analysis

Covered functions
148
Functions that are reachable but not covered
3
Reachable functions
20
Percentage of reachable functions covered
85.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.
Warning: The number of covered functions are larger than the number of reachable functions. This means that there are more functions covered at runtime than are extracted using static analysis. This is likely a result of the static analysis component failing to extract the right call graph or the coverage runtime being compiled with sanitizers in code that the static analysis has not analysed. This can happen if lto/gold is not used in all places that coverage instrumentation is used.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/monero/monero/tests/fuzz/base58.cpp 1
/src/monero/monero/src/common/base58.cpp 5
/src/monero/monero/contrib/epee/include/int-util.h 3

Fuzzer: bulletproof_fuzz_tests

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 9.47%
gold [1:9] 6 6.31%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 80 84.2%
All colors 95 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
44 118 11 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::unordered_map , std::__1::allocator >, std::__1::hash , std::__1::equal_to , std::__1::allocator , std::__1::allocator > > > >::empty[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_ostream >& std::__1::operator<<[abi:ne180100] >(std::__1::basic_ostream >&, char const*)', 'el::base::utils::File::extractPathFromFilename(std::__1::basic_string , std::__1::allocator > const&, char const*)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::empty[abi:ne180100]() const', 'el::base::TypedConfigurations::resolveFilename(std::__1::basic_string , std::__1::allocator > const&)', 'el::base::TypedConfigurations::insertFile(el::Level, std::__1::basic_string , std::__1::allocator > const&)::$_0::operator()(el::Level) const', 'std::__1::basic_string , std::__1::allocator >::empty[abi:ne180100]() const', 'el::LevelHelper::convertToString(el::Level)', 'el::base::utils::File::createPath(std::__1::basic_string , std::__1::allocator > const&)']

44 118 el::base::TypedConfigurations::insertFile(el::Level,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1886
14 14 13 :

['std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >&>::type, std::__1::__unwrap_ref_decay , std::__1::allocator > >::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator > >(std::__1::basic_string , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator >&&)', 'el::base::utils::CommandLineArgs::hasParamWithValue(char const*) const', 'el::base::utils::CommandLineArgs::hasParam(char const*) const', '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8ne180100ILi0EEEPKc', 'std::__1::basic_string , std::__1::allocator >::substr[abi:ne180100](unsigned long, unsigned long) const', 'std::__1::vector , std::__1::allocator >, std::__1::allocator , std::__1::allocator > > >::push_back[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void*>*> >, bool> std::__1::unordered_map , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >, std::__1::hash , std::__1::allocator > >, std::__1::equal_to , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, std::__1::basic_string , std::__1::allocator > > > >::insert[abi:ne180100] , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void>(std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >::~pair()', 'strstr', 'std::__1::basic_string , std::__1::allocator >::operator=[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::basic_string , std::__1::allocator >::find_first_of[abi:ne180100](char, unsigned long) const']

14 14 el::base::utils::CommandLineArgs::setArgs(int,char**) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1426
10 10 5 :

['std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)', '__clang_call_terminate', '__cxa_rethrow', '__cxa_end_catch', '__cxa_begin_catch']

10 10 el::base::LogFormat⪙::base::TypedConfigurations::unsafeGetConfigByRef (el::Level,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,charconst*) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2022
0 34 1 :

['el::Configurations::unsafeSet(el::Level, el::ConfigurationType, std::__1::basic_string , std::__1::allocator > const&)']

0 38 el::Configurations::unsafeSetGlobally(el::ConfigurationType,std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:650
0 3 2 :

['el::base::LogFormat::operator=(el::base::LogFormat const&)', 'std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)']

0 3 voidel::base::TypedConfigurations::setValue (el::Level,el::base::LogFormatconst&,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2050
0 0 None 4 4 el::base::TypedConfigurations::getULong(std::__1::basic_string ,std::__1::allocator >) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1838
0 0 None 2 556 el::base::RegisteredLoggers::get(std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2000
0 0 None 0 514 el::Logger::configure(el::Configurationsconst&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:748
0 0 9 :

['std::__1::shared_ptr > >::operator=[abi:ne180100](std::__1::shared_ptr > > const&)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::at(el::Level const&)', 'std::__1::__hash_map_iterator > > >, void*>*> >::operator->[abi:ne180100]() const', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::find[abi:ne180100](el::Level const&)', 'std::__1::operator!=[abi:ne180100](std::__1::__hash_map_iterator > > >, void*>*> > const&, std::__1::__hash_map_iterator > > >, void*>*> > const&)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::end[abi:ne180100]()', 'bool std::__1::operator==[abi:ne180100] >, std::__1::basic_fstream > >(std::__1::shared_ptr > > const&, std::__1::shared_ptr > > const&)', 'std::__1::operator==[abi:ne180100](std::__1::__hash_map_iterator > > >, void*>*> > const&, std::__1::__hash_map_iterator > > >, void*>*> > const&)', 'std::__1::pair ::type, std::__1::__unwrap_ref_decay > > const&>::type> std::__1::make_pair[abi:ne180100] > > const&>(el::Level&, std::__1::shared_ptr > > const&)']

0 0 voidel::base::TypedConfigurations::setValue >>>(el::Level,std::__1::shared_ptr >>const&,std::__1::unordered_map >>,std::__1::hash ,std::__1::equal_to ,std::__1::allocator >>>>>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2039

Runtime coverage analysis

Covered functions
176
Functions that are reachable but not covered
22
Reachable functions
96
Percentage of reachable functions covered
77.08%
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.
Warning: The number of covered functions are larger than the number of reachable functions. This means that there are more functions covered at runtime than are extracted using static analysis. This is likely a result of the static analysis component failing to extract the right call graph or the coverage runtime being compiled with sanitizers in code that the static analysis has not analysed. This can happen if lto/gold is not used in all places that coverage instrumentation is used.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/monero/monero/tests/fuzz/bulletproof.cpp 1
/src/monero/monero/contrib/epee/include/span.h 8
/src/monero/monero/src/serialization/binary_archive.h 15
/usr/local/include/boost/utility/value_init.hpp 6
/src/monero/monero/src/ringct/rctTypes.h 5
/usr/local/bin/../include/c++/v1/initializer_list 1
/src/monero/monero/src/serialization/serialization.h 5
/src/monero/monero/src/serialization/containers.h 1
/src/monero/monero/src/serialization/container.h 4
/src/monero/monero/src/common/varint.h 2

Fuzzer: levin_fuzz_tests

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 1127 71.0%
gold [1:9] 19 1.19%
yellow [10:29] 6 0.37%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 435 27.4%
All colors 1587 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
44 118 11 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::unordered_map , std::__1::allocator >, std::__1::hash , std::__1::equal_to , std::__1::allocator , std::__1::allocator > > > >::empty[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_ostream >& std::__1::operator<<[abi:ne180100] >(std::__1::basic_ostream >&, char const*)', 'el::base::utils::File::extractPathFromFilename(std::__1::basic_string , std::__1::allocator > const&, char const*)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::empty[abi:ne180100]() const', 'el::base::TypedConfigurations::resolveFilename(std::__1::basic_string , std::__1::allocator > const&)', 'el::base::TypedConfigurations::insertFile(el::Level, std::__1::basic_string , std::__1::allocator > const&)::$_0::operator()(el::Level) const', 'std::__1::basic_string , std::__1::allocator >::empty[abi:ne180100]() const', 'el::LevelHelper::convertToString(el::Level)', 'el::base::utils::File::createPath(std::__1::basic_string , std::__1::allocator > const&)']

44 118 el::base::TypedConfigurations::insertFile(el::Level,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1886
14 14 13 :

['std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >&>::type, std::__1::__unwrap_ref_decay , std::__1::allocator > >::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator > >(std::__1::basic_string , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator >&&)', 'el::base::utils::CommandLineArgs::hasParamWithValue(char const*) const', 'el::base::utils::CommandLineArgs::hasParam(char const*) const', '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8ne180100ILi0EEEPKc', 'std::__1::basic_string , std::__1::allocator >::substr[abi:ne180100](unsigned long, unsigned long) const', 'std::__1::vector , std::__1::allocator >, std::__1::allocator , std::__1::allocator > > >::push_back[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void*>*> >, bool> std::__1::unordered_map , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >, std::__1::hash , std::__1::allocator > >, std::__1::equal_to , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, std::__1::basic_string , std::__1::allocator > > > >::insert[abi:ne180100] , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void>(std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >::~pair()', 'strstr', 'std::__1::basic_string , std::__1::allocator >::operator=[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::basic_string , std::__1::allocator >::find_first_of[abi:ne180100](char, unsigned long) const']

14 14 el::base::utils::CommandLineArgs::setArgs(int,char**) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1426
12 20 13 :

['std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int const&>(std::__1::basic_string , std::__1::allocator > const&, int const&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rbegin[abi:ne180100]()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int>(std::__1::basic_string , std::__1::allocator > const&, int&&)', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator->[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >, int>::~pair()', 'el::base::priority(el::Level)', 'bool std::__1::operator!=[abi:ne180100] , std::__1::allocator >, el::Level> const*>, std::__1::__wrap_iter , std::__1::allocator >, el::Level>*> >(std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> > const&, std::__1::reverse_iterator , std::__1::allocator >, el::Level>*> > const&)', '_ZNSt3__116reverse_iteratorINS_11__wrap_iterIPKNS_4pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN2el5LevelEEEEEEC2B8ne180100INS1_IPSB_EEvEERKNS0_IT_EE', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator++[abi:ne180100]()', 'el::base::utils::Str::wildCardMatch(char const*, char const*)', 'std::__1::pair , std::__1::allocator >, int>, std::__1::__tree_node , std::__1::allocator >, int>, void*>*, long> >, bool> std::__1::map , std::__1::allocator >, int, std::__1::less , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, int> > >::insert[abi:ne180100] , std::__1::allocator >, int>, void>(std::__1::pair , std::__1::allocator >, int>&&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rend[abi:ne180100]()']

12 20 el::base::VRegistry::priority_allowed(int,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2227
10 10 4 :

['__cxa_free_exception', '__cxa_allocate_exception', 'std::range_error::range_error[abi:ne180100](char const*)', '__cxa_throw']

10 10 epee::byte_buffer_increase(std::__1::unique_ptr ,unsignedlong,unsignedlong) call site: 00000 /src/monero/monero/contrib/epee/src/byte_slice.cpp:287
10 10 5 :

['std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)', '__clang_call_terminate', '__cxa_rethrow', '__cxa_end_catch', '__cxa_begin_catch']

10 10 el::base::LogFormat⪙::base::TypedConfigurations::unsafeGetConfigByRef (el::Level,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,charconst*) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2022
8 8 4 :

['__cxa_free_exception', '__cxa_allocate_exception', 'std::runtime_error::runtime_error(char const*)', '__cxa_throw']

8 8 epee::levin::message_writer::finalize(unsignedint,unsignedint,unsignedint,bool) call site: 00000 /src/monero/monero/contrib/epee/src/levin_base.cpp:46
0 34 1 :

['el::Configurations::unsafeSet(el::Level, el::ConfigurationType, std::__1::basic_string , std::__1::allocator > const&)']

0 38 el::Configurations::unsafeSetGlobally(el::ConfigurationType,std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:650
0 3 2 :

['el::base::LogFormat::operator=(el::base::LogFormat const&)', 'std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)']

0 3 voidel::base::TypedConfigurations::setValue (el::Level,el::base::LogFormatconst&,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2050
0 0 None 4416 5237 epee::levin::async_protocol_handler<(anonymousnamespace)::test_levin_connection_context>::handle_recv(voidconst*,unsignedlong) call site: 00000 /src/monero/monero/contrib/epee/include/net/levin_protocol_handler_async.h:402
0 0 None 3619 4478 epee::levin::async_protocol_handler<(anonymousnamespace)::test_levin_connection_context>::handle_recv(voidconst*,unsignedlong) call site: 00000 /src/monero/monero/contrib/epee/include/net/levin_protocol_handler_async.h:499
0 0 None 4 4 epee::byte_slice::byte_slice(epee::byte_stream&&,bool) call site: 00000 /src/monero/monero/contrib/epee/src/byte_slice.cpp:188
0 0 None 4 4 el::base::TypedConfigurations::getULong(std::__1::basic_string ,std::__1::allocator >) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1838

Runtime coverage analysis

Covered functions
226
Functions that are reachable but not covered
1170
Reachable functions
1507
Percentage of reachable functions covered
22.36%
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/monero/monero/tests/fuzz/levin.cpp 6
/usr/local/include/boost/asio/impl/io_context.ipp 3
/usr/local/include/boost/asio/impl/execution_context.ipp 7
/usr/local/include/boost/asio/detail/noncopyable.hpp 2
/usr/local/include/boost/asio/detail/impl/service_registry.ipp 7
/usr/local/include/boost/asio/detail/impl/posix_mutex.ipp 1
/usr/local/include/boost/asio/error.hpp 1
/usr/local/include/boost/system/detail/system_category.hpp 1
/usr/local/include/boost/system/detail/error_code.hpp 12
/usr/local/include/boost/system/detail/error_category.hpp 1
/usr/local/include/boost/assert/source_location.hpp 6
/usr/local/include/boost/asio/detail/throw_error.hpp 1
/usr/local/include/boost/asio/detail/impl/throw_error.ipp 1
/usr/local/include/boost/system/system_error.hpp 2
/usr/local/include/boost/system/detail/system_category_message.hpp 1
/usr/local/include/boost/system/detail/generic_category_message.hpp 3
/usr/local/include/boost/system/detail/interop_category.hpp 1
/usr/local/include/boost/system/detail/append_int.hpp 1
/usr/local/include/boost/system/detail/snprintf.hpp 1
/usr/local/include/boost/throw_exception.hpp 41
/usr/local/include/boost/exception/exception.hpp 12
/usr/local/include/boost/exception/info.hpp 7
/usr/local/include/boost/asio/detail/impl/scheduler.ipp 2
/usr/local/include/boost/asio/execution_context.hpp 4
/usr/local/include/boost/asio/detail/conditionally_enabled_mutex.hpp 2
/usr/local/include/boost/asio/detail/conditionally_enabled_event.hpp 2
/usr/local/include/boost/asio/detail/impl/posix_event.ipp 1
/usr/local/include/boost/asio/detail/scheduler.hpp 1
/usr/local/include/boost/asio/detail/scheduler_operation.hpp 3
/usr/local/include/boost/asio/detail/op_queue.hpp 6
/usr/local/include/boost/asio/detail/posix_signal_blocker.hpp 2
/usr/local/include/boost/asio/detail/posix_thread.hpp 4
/usr/local/include/boost/asio/detail/impl/posix_thread.ipp 2
/usr/local/include/boost/asio/detail/posix_event.hpp 1
/usr/local/include/boost/asio/detail/posix_mutex.hpp 3
/usr/local/include/boost/asio/detail/scoped_ptr.hpp 4
/usr/local/include/boost/asio/impl/execution_context.hpp 2
/usr/local/include/boost/asio/detail/impl/service_registry.hpp 3
/usr/local/include/boost/asio/detail/scoped_lock.hpp 2
/src/monero/monero/contrib/epee/include/net/levin_protocol_handler_async.h 13
/src/monero/monero/contrib/epee/include/syncobj.h 8
/usr/local/include/boost/thread/pthread/recursive_mutex.hpp 4
/usr/local/include/boost/thread/exceptions.hpp 8
/usr/local/include/boost/system/detail/generic_category.hpp 1
/usr/local/include/boost/unordered/unordered_map.hpp 4
/usr/local/include/boost/unordered/detail/implementation.hpp 50
/usr/local/include/boost/unordered/detail/opt_storage.hpp 3
/usr/local/include/boost/core/empty_value.hpp 4
/usr/local/include/boost/unordered/detail/fca.hpp 36
/src/monero/monero/contrib/epee/include/net/levin_base.h 4
/usr/local/include/boost/thread/pthread/mutex.hpp 4
/src/monero/monero/contrib/epee/include/byte_slice.h 4
/src/monero/monero/contrib/epee/include/span.h 6
/src/monero/monero/contrib/epee/include/net/net_utils_base.h 8
/src/monero/monero/contrib/epee/include/net/buffer.h 6
/usr/local/include/boost/thread/pthread/thread_data.hpp 6
/usr/local/include/boost/thread/lock_types.hpp 5
/usr/local/include/boost/thread/pthread/condition_variable_fwd.hpp 5
/usr/local/include/boost/chrono/time_point.hpp 2
/usr/local/include/boost/chrono/duration.hpp 11
/usr/local/include/boost/thread/detail/platform_time.hpp 24
/usr/local/include/boost/chrono/ceil.hpp 1
/usr/local/include/boost/thread/pthread/condition_variable.hpp 5
/usr/local/include/boost/thread/lock_guard.hpp 2
/usr/local/include/boost/container_hash/hash.hpp 1
/usr/local/include/boost/uuid/uuid.hpp 5
/usr/local/include/boost/unordered/detail/prime_fmod.hpp 5
/usr/local/include/boost/unordered/detail/narrow_cast.hpp 1
/usr/local/include/boost/core/allocator_access.hpp 7
/src/monero/monero/contrib/epee/src/misc_language.cpp 1
/usr/local/include/boost/thread/thread_time.hpp 1
/usr/local/include/boost/date_time/microsec_time_clock.hpp 2
/usr/local/include/boost/date_time/gregorian/greg_year.hpp 4
/usr/local/include/boost/date_time/constrained_value.hpp 21
/usr/local/bin/../include/c++/v1/stdexcept 3
/usr/local/include/boost/date_time/gregorian/greg_month.hpp 4
/usr/local/include/boost/date_time/gregorian/greg_day.hpp 5
/usr/local/include/boost/date_time/gregorian/greg_date.hpp 2
/usr/local/include/boost/date_time/date.hpp 4
/usr/local/include/boost/date_time/year_month_day.hpp 1
/usr/local/include/boost/date_time/gregorian_calendar.ipp 3
/usr/local/include/boost/date_time/time_resolution_traits.hpp 5
/usr/local/include/boost/date_time/posix_time/posix_time_config.hpp 3
/usr/local/include/boost/date_time/time_duration.hpp 10
/usr/local/include/boost/date_time/int_adapter.hpp 30
/usr/local/include/boost/date_time/posix_time/ptime.hpp 3
/usr/local/include/boost/date_time/time.hpp 4
/usr/local/include/boost/date_time/time_system_counted.hpp 11
/usr/local/include/boost/date_time/c_time.hpp 1
/usr/local/include/boost/date_time/posix_time/conversion.hpp 1
/usr/local/include/boost/date_time/posix_time/posix_time_duration.hpp 1
/usr/local/include/boost/numeric/conversion/cast.hpp 1
/usr/local/include/boost/numeric/conversion/detail/converter.hpp 1
/src/monero/monero/external/easylogging++/easylogging++.cc 78
/src/monero/monero/external/easylogging++/easylogging++.h 127
/usr/include/stdlib.h 1
/usr/include/x86_64-linux-gnu/sys/stat.h 1
/src/monero/monero/contrib/epee/src/net_utils_base.cpp 1
/usr/local/include/boost/core/allocator_traits.hpp 2
/usr/local/include/boost/core/bit.hpp 2
/src/monero/monero/contrib/epee/src/buffer.cpp 1
/usr/local/include/boost/smart_ptr/shared_ptr.hpp 2
/usr/local/include/boost/smart_ptr/detail/shared_count.hpp 2
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp 5
/src/monero/monero/contrib/epee/src/levin_base.cpp 3
/src/monero/monero/contrib/epee/include/byte_stream.h 10
/src/monero/monero/contrib/epee/src/byte_stream.cpp 2
/src/monero/monero/contrib/epee/src/byte_slice.cpp 6

Fuzzer: http-client_fuzz_tests

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 688 62.3%
gold [1:9] 7 0.63%
yellow [10:29] 8 0.72%
greenyellow [30:49] 6 0.54%
lawngreen 50+ 394 35.7%
All colors 1103 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
8794 11321 17 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', '_ZN2el4base6WriterlsIA78_cEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS6_', 'std::__1::basic_string , std::__1::allocator >::erase(unsigned long, unsigned long)', 'el::Loggers::allowed(el::Level, char const*)', 'std::__1::basic_string , std::__1::allocator >::basic_string[abi:ne180100]()', 'std::__1::basic_string , std::__1::allocator >::operator[][abi:ne180100](unsigned long)', 'el::base::Writer::construct(char const*)', 'el::base::Writer::Writer(el::Level, el::Color, char const*, unsigned long, char const*, el::base::DispatchAction, unsigned short)', '_ZN2el4base6WriterlsINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEENS3_9enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKSB_', '_ZN2el4base6WriterlsIN4epee9net_utils4http27http_simple_client_templateI12dummy_clientE13chunked_stateEEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKSC_', 'epee::net_utils::http::http_simple_client_template ::get_chunk_head(std::__1::basic_string , std::__1::allocator >&, unsigned long&, bool&)', 'boost::shared_ptr ::operator->() const', 'std::__1::basic_string , std::__1::allocator >::assign(std::__1::basic_string , std::__1::allocator > const&, unsigned long, unsigned long)', 'el::base::Writer::~Writer()', '_ZN2el4base6WriterlsIA50_cEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS6_', 'std::__1::basic_string , std::__1::allocator >::swap[abi:ne180100](std::__1::basic_string , std::__1::allocator >&)']

8794 11359 epee::net_utils::http::http_simple_client_template ::handle_body_body_chunked(std::__1::basic_string ,std::__1::allocator >&,bool&) call site: 00000 /src/monero/monero/contrib/epee/include/net/http_client.h:541
776 776 1 :

['_ZN2el4base6WriterlsIA35_cEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS6_']

3619 4478 epee::net_utils::http::http_simple_client_template ::handle_header(std::__1::basic_string ,std::__1::allocator >&,bool&) call site: 00000 /src/monero/monero/contrib/epee/include/net/http_client.h:350
776 776 1 :

['_ZN2el4base6WriterlsIA62_cEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS6_']

3619 4478 epee::net_utils::http::http_simple_client_template ::handle_body_content_len(std::__1::basic_string ,std::__1::allocator >&,bool&) call site: 00000 /src/monero/monero/contrib/epee/include/net/http_client.h:386
776 776 1 :

['_ZN2el4base6WriterlsIA58_cEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS6_']

3619 4478 epee::net_utils::http::http_simple_client_template ::handle_body_body_chunked(std::__1::basic_string ,std::__1::allocator >&,bool&) call site: 00000 /src/monero/monero/contrib/epee/include/net/http_client.h:504
44 118 11 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::unordered_map , std::__1::allocator >, std::__1::hash , std::__1::equal_to , std::__1::allocator , std::__1::allocator > > > >::empty[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_ostream >& std::__1::operator<<[abi:ne180100] >(std::__1::basic_ostream >&, char const*)', 'el::base::utils::File::extractPathFromFilename(std::__1::basic_string , std::__1::allocator > const&, char const*)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::empty[abi:ne180100]() const', 'el::base::TypedConfigurations::resolveFilename(std::__1::basic_string , std::__1::allocator > const&)', 'el::base::TypedConfigurations::insertFile(el::Level, std::__1::basic_string , std::__1::allocator > const&)::$_0::operator()(el::Level) const', 'std::__1::basic_string , std::__1::allocator >::empty[abi:ne180100]() const', 'el::LevelHelper::convertToString(el::Level)', 'el::base::utils::File::createPath(std::__1::basic_string , std::__1::allocator > const&)']

44 118 el::base::TypedConfigurations::insertFile(el::Level,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1886
14 14 13 :

['std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >&>::type, std::__1::__unwrap_ref_decay , std::__1::allocator > >::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator > >(std::__1::basic_string , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator >&&)', 'el::base::utils::CommandLineArgs::hasParamWithValue(char const*) const', 'el::base::utils::CommandLineArgs::hasParam(char const*) const', '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8ne180100ILi0EEEPKc', 'std::__1::basic_string , std::__1::allocator >::substr[abi:ne180100](unsigned long, unsigned long) const', 'std::__1::vector , std::__1::allocator >, std::__1::allocator , std::__1::allocator > > >::push_back[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void*>*> >, bool> std::__1::unordered_map , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >, std::__1::hash , std::__1::allocator > >, std::__1::equal_to , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, std::__1::basic_string , std::__1::allocator > > > >::insert[abi:ne180100] , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void>(std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >::~pair()', 'strstr', 'std::__1::basic_string , std::__1::allocator >::operator=[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::basic_string , std::__1::allocator >::find_first_of[abi:ne180100](char, unsigned long) const']

14 14 el::base::utils::CommandLineArgs::setArgs(int,char**) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1426
12 20 13 :

['std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int const&>(std::__1::basic_string , std::__1::allocator > const&, int const&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rbegin[abi:ne180100]()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int>(std::__1::basic_string , std::__1::allocator > const&, int&&)', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator->[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >, int>::~pair()', 'el::base::priority(el::Level)', 'bool std::__1::operator!=[abi:ne180100] , std::__1::allocator >, el::Level> const*>, std::__1::__wrap_iter , std::__1::allocator >, el::Level>*> >(std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> > const&, std::__1::reverse_iterator , std::__1::allocator >, el::Level>*> > const&)', '_ZNSt3__116reverse_iteratorINS_11__wrap_iterIPKNS_4pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN2el5LevelEEEEEEC2B8ne180100INS1_IPSB_EEvEERKNS0_IT_EE', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator++[abi:ne180100]()', 'el::base::utils::Str::wildCardMatch(char const*, char const*)', 'std::__1::pair , std::__1::allocator >, int>, std::__1::__tree_node , std::__1::allocator >, int>, void*>*, long> >, bool> std::__1::map , std::__1::allocator >, int, std::__1::less , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, int> > >::insert[abi:ne180100] , std::__1::allocator >, int>, void>(std::__1::pair , std::__1::allocator >, int>&&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rend[abi:ne180100]()']

12 20 el::base::VRegistry::priority_allowed(int,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2227
10 10 5 :

['std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)', '__clang_call_terminate', '__cxa_rethrow', '__cxa_end_catch', '__cxa_begin_catch']

10 10 el::base::LogFormat⪙::base::TypedConfigurations::unsafeGetConfigByRef (el::Level,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,charconst*) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2022
0 34 1 :

['el::Configurations::unsafeSet(el::Level, el::ConfigurationType, std::__1::basic_string , std::__1::allocator > const&)']

0 38 el::Configurations::unsafeSetGlobally(el::ConfigurationType,std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:650
0 7 1 :

['epee::net_utils::http::http_simple_client_template ::is_hex_symbol(char)']

3631 4459 epee::net_utils::http::http_simple_client_template ::get_chunk_head(std::__1::basic_string ,std::__1::allocator >&,unsignedlong&,bool&) call site: 00000 /src/monero/monero/contrib/epee/include/net/http_client.h:453
0 3 2 :

['el::base::LogFormat::operator=(el::base::LogFormat const&)', 'std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)']

0 3 voidel::base::TypedConfigurations::setValue (el::Level,el::base::LogFormatconst&,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2050
0 0 None 8794 11359 epee::net_utils::http::http_simple_client_template ::handle_body_body_chunked(std::__1::basic_string ,std::__1::allocator >&,bool&) call site: 00000 /src/monero/monero/contrib/epee/include/net/http_client.h:522

Runtime coverage analysis

Covered functions
181
Functions that are reachable but not covered
674
Reachable functions
940
Percentage of reachable functions covered
28.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/monero/monero/tests/fuzz/http-client.cpp 3
/src/monero/monero/contrib/epee/include/net/http_client.h 15
/src/monero/monero/contrib/epee/include/syncobj.h 5
/usr/local/include/boost/thread/pthread/recursive_mutex.hpp 2
/src/monero/monero/external/easylogging++/easylogging++.cc 78
/src/monero/monero/external/easylogging++/easylogging++.h 116
/usr/include/stdlib.h 1
/usr/include/x86_64-linux-gnu/sys/stat.h 1
/src/monero/monero/contrib/epee/include/net/http_base.h 5
/src/monero/monero/contrib/epee/include/storages/parserse_base_utils.h 1
/usr/include/ctype.h 3
/src/monero/monero/contrib/epee/src/string_tools.cpp 1
/usr/local/include/boost/algorithm/string/predicate.hpp 2
/usr/local/include/boost/algorithm/string/compare.hpp 3
/usr/local/include/boost/range/as_literal.hpp 3
/usr/local/include/boost/range/iterator_range_core.hpp 9
/usr/local/include/boost/range/begin.hpp 6
/usr/local/include/boost/range/end.hpp 6
/src/monero/monero/contrib/epee/include/reg_exp_definer.h 1
/usr/local/include/boost/regex/v5/basic_regex.hpp 33
/usr/local/include/boost/regex/v5/cpp_regex_traits.hpp 25
/usr/local/include/boost/regex/v5/regex_traits.hpp 2
/usr/local/include/boost/regex/v5/object_cache.hpp 4
/usr/local/include/boost/regex/v5/pattern_except.hpp 4
/usr/local/include/boost/throw_exception.hpp 21
/usr/local/include/boost/exception/exception.hpp 7
/usr/local/include/boost/regex/v5/regex_traits_defaults.hpp 6
/usr/local/include/boost/regex/v5/primary_transform.hpp 2
/usr/local/include/boost/regex/v5/regex_raw_buffer.hpp 7
/usr/local/include/boost/regex/v5/basic_regex_parser.hpp 7
/usr/local/include/boost/regex/v5/basic_regex_creator.hpp 24
/usr/local/include/boost/regex/v5/perl_matcher.hpp 8
/usr/local/include/boost/regex/v5/match_results.hpp 8
/usr/local/include/boost/regex/v5/sub_match.hpp 4
/usr/local/include/boost/regex/v5/regex_search.hpp 3
/usr/local/include/boost/regex/v5/perl_matcher_common.hpp 4
/usr/local/bin/../include/c++/v1/stdexcept 2
/usr/local/include/boost/regex/v5/match_flags.hpp 4
/usr/local/include/boost/regex/v5/perl_matcher_non_recursive.hpp 4
/usr/local/include/boost/regex/v5/mem_block_cache.hpp 6
/src/monero/monero/contrib/epee/include/net/http_client_base.h 2
/usr/local/include/boost/smart_ptr/shared_ptr.hpp 7
/usr/local/include/boost/smart_ptr/detail/shared_count.hpp 4
/usr/local/include/boost/smart_ptr/detail/sp_counted_impl.hpp 1
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp 4
/usr/local/include/boost/core/checked_delete.hpp 1
/src/monero/monero/contrib/epee/include/string_tools_lexical.h 1
/usr/local/include/boost/lexical_cast.hpp 1
/usr/local/include/boost/lexical_cast/try_lexical_convert.hpp 1
/usr/local/include/boost/lexical_cast/detail/converter_lexical.hpp 1
/usr/local/include/boost/lexical_cast/detail/converter_lexical_streams.hpp 8
/usr/local/include/boost/lexical_cast/detail/lcast_unsigned_converters.hpp 4
/usr/local/include/boost/lexical_cast/bad_lexical_cast.hpp 3
/usr/local/bin/../include/c++/v1/typeinfo 1
/usr/local/bin/../include/c++/v1/__exception/exception.h 1
/src/monero/monero/contrib/epee/include/string_tools.h 1
/usr/local/include/boost/algorithm/string/trim.hpp 4
/usr/local/include/boost/algorithm/string/classification.hpp 1
/usr/local/include/boost/algorithm/string/detail/classification.hpp 4
/usr/local/include/boost/algorithm/string/detail/trim.hpp 3

Fuzzer: load-from-binary_fuzz_tests

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 677 51.8%
gold [1:9] 10 0.76%
yellow [10:29] 8 0.61%
greenyellow [30:49] 27 2.06%
lawngreen 50+ 583 44.6%
All colors 1305 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
44 118 11 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::unordered_map , std::__1::allocator >, std::__1::hash , std::__1::equal_to , std::__1::allocator , std::__1::allocator > > > >::empty[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_ostream >& std::__1::operator<<[abi:ne180100] >(std::__1::basic_ostream >&, char const*)', 'el::base::utils::File::extractPathFromFilename(std::__1::basic_string , std::__1::allocator > const&, char const*)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::empty[abi:ne180100]() const', 'el::base::TypedConfigurations::resolveFilename(std::__1::basic_string , std::__1::allocator > const&)', 'el::base::TypedConfigurations::insertFile(el::Level, std::__1::basic_string , std::__1::allocator > const&)::$_0::operator()(el::Level) const', 'std::__1::basic_string , std::__1::allocator >::empty[abi:ne180100]() const', 'el::LevelHelper::convertToString(el::Level)', 'el::base::utils::File::createPath(std::__1::basic_string , std::__1::allocator > const&)']

44 118 el::base::TypedConfigurations::insertFile(el::Level,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1886
14 14 13 :

['std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >&>::type, std::__1::__unwrap_ref_decay , std::__1::allocator > >::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator > >(std::__1::basic_string , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator >&&)', 'el::base::utils::CommandLineArgs::hasParamWithValue(char const*) const', 'el::base::utils::CommandLineArgs::hasParam(char const*) const', '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8ne180100ILi0EEEPKc', 'std::__1::basic_string , std::__1::allocator >::substr[abi:ne180100](unsigned long, unsigned long) const', 'std::__1::vector , std::__1::allocator >, std::__1::allocator , std::__1::allocator > > >::push_back[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void*>*> >, bool> std::__1::unordered_map , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >, std::__1::hash , std::__1::allocator > >, std::__1::equal_to , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, std::__1::basic_string , std::__1::allocator > > > >::insert[abi:ne180100] , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void>(std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >::~pair()', 'strstr', 'std::__1::basic_string , std::__1::allocator >::operator=[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::basic_string , std::__1::allocator >::find_first_of[abi:ne180100](char, unsigned long) const']

14 14 el::base::utils::CommandLineArgs::setArgs(int,char**) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1426
12 20 13 :

['std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int const&>(std::__1::basic_string , std::__1::allocator > const&, int const&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rbegin[abi:ne180100]()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int>(std::__1::basic_string , std::__1::allocator > const&, int&&)', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator->[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >, int>::~pair()', 'el::base::priority(el::Level)', 'bool std::__1::operator!=[abi:ne180100] , std::__1::allocator >, el::Level> const*>, std::__1::__wrap_iter , std::__1::allocator >, el::Level>*> >(std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> > const&, std::__1::reverse_iterator , std::__1::allocator >, el::Level>*> > const&)', '_ZNSt3__116reverse_iteratorINS_11__wrap_iterIPKNS_4pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN2el5LevelEEEEEEC2B8ne180100INS1_IPSB_EEvEERKNS0_IT_EE', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator++[abi:ne180100]()', 'el::base::utils::Str::wildCardMatch(char const*, char const*)', 'std::__1::pair , std::__1::allocator >, int>, std::__1::__tree_node , std::__1::allocator >, int>, void*>*, long> >, bool> std::__1::map , std::__1::allocator >, int, std::__1::less , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, int> > >::insert[abi:ne180100] , std::__1::allocator >, int>, void>(std::__1::pair , std::__1::allocator >, int>&&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rend[abi:ne180100]()']

12 20 el::base::VRegistry::priority_allowed(int,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2227
10 10 5 :

['std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)', '__clang_call_terminate', '__cxa_rethrow', '__cxa_end_catch', '__cxa_begin_catch']

10 10 el::base::LogFormat⪙::base::TypedConfigurations::unsafeGetConfigByRef (el::Level,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,charconst*) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2022
0 34 1 :

['el::Configurations::unsafeSet(el::Level, el::ConfigurationType, std::__1::basic_string , std::__1::allocator > const&)']

0 38 el::Configurations::unsafeSetGlobally(el::ConfigurationType,std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:650
0 3 2 :

['el::base::LogFormat::operator=(el::base::LogFormat const&)', 'std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)']

0 3 voidel::base::TypedConfigurations::setValue (el::Level,el::base::LogFormatconst&,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2050
0 0 None 11134 16009 epee::serialization::portable_storage::load_from_binary(epee::span ,epee::serialization::portable_storage::limits_tconst*) call site: 00000 /src/monero/monero/contrib/epee/src/portable_storage.cpp:110
0 0 None 8 8 epee::serialization::throwable_buffer_reader::throwable_buffer_reader(voidconst*,unsignedlong) call site: 00000 /src/monero/monero/contrib/epee/include/storages/portable_storage_from_bin.h:120
0 0 None 4 4 el::base::TypedConfigurations::getULong(std::__1::basic_string ,std::__1::allocator >) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1838
0 0 None 2 556 el::base::RegisteredLoggers::get(std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2000
0 0 None 0 514 el::Logger::configure(el::Configurationsconst&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:748
0 0 1 :

['std::__1::__map_const_iterator , std::__1::allocator >, int>, std::__1::__tree_node , std::__1::allocator >, int>, void*>*, long> >::operator->[abi:ne180100]() const']

0 0 el::base::VRegistry::priority_allowed(int,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2225

Runtime coverage analysis

Covered functions
262
Functions that are reachable but not covered
948
Reachable functions
1376
Percentage of reachable functions covered
31.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
/src/monero/monero/tests/fuzz/load_from_binary.cpp 1
/src/monero/monero/contrib/epee/include/storages/portable_storage.h 3
/src/monero/monero/contrib/epee/include/storages/portable_storage_base.h 68
/src/monero/monero/contrib/epee/include/span.h 4
/src/monero/monero/contrib/epee/src/portable_storage.cpp 1
/src/monero/monero/external/easylogging++/easylogging++.cc 78
/src/monero/monero/external/easylogging++/easylogging++.h 119
/usr/include/stdlib.h 1
/usr/include/x86_64-linux-gnu/sys/stat.h 1
/src/monero/monero/contrib/epee/include/storages/portable_storage_from_bin.h 61
/usr/local/include/boost/variant/variant.hpp 147
/usr/local/include/boost/type_traits/aligned_storage.hpp 8
/usr/local/include/boost/variant/detail/initializer.hpp 26
/usr/local/include/boost/type_traits/integral_constant.hpp 2
/usr/local/include/boost/variant/detail/visitation_impl.hpp 112
/usr/local/include/boost/variant/detail/cast_storage.hpp 39
/usr/local/include/boost/variant/detail/backup_holder.hpp 26
/usr/local/include/boost/variant/recursive_wrapper.hpp 5
/usr/local/include/boost/variant/detail/forced_return.hpp 2
/usr/local/include/boost/core/checked_delete.hpp 1
/usr/local/include/boost/variant/get.hpp 19
/usr/local/include/boost/core/addressof.hpp 2
/usr/local/bin/../include/c++/v1/__exception/exception.h 2
/usr/local/include/boost/throw_exception.hpp 5
/usr/local/include/boost/exception/exception.hpp 7

Fuzzer: tx-extra_fuzz_tests

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 536 62.1%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 1 0.11%
lawngreen 50+ 326 37.7%
All colors 863 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
44 118 11 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::unordered_map , std::__1::allocator >, std::__1::hash , std::__1::equal_to , std::__1::allocator , std::__1::allocator > > > >::empty[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_ostream >& std::__1::operator<<[abi:ne180100] >(std::__1::basic_ostream >&, char const*)', 'el::base::utils::File::extractPathFromFilename(std::__1::basic_string , std::__1::allocator > const&, char const*)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::empty[abi:ne180100]() const', 'el::base::TypedConfigurations::resolveFilename(std::__1::basic_string , std::__1::allocator > const&)', 'el::base::TypedConfigurations::insertFile(el::Level, std::__1::basic_string , std::__1::allocator > const&)::$_0::operator()(el::Level) const', 'std::__1::basic_string , std::__1::allocator >::empty[abi:ne180100]() const', 'el::LevelHelper::convertToString(el::Level)', 'el::base::utils::File::createPath(std::__1::basic_string , std::__1::allocator > const&)']

44 118 el::base::TypedConfigurations::insertFile(el::Level,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1886
14 14 13 :

['std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >&>::type, std::__1::__unwrap_ref_decay , std::__1::allocator > >::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator > >(std::__1::basic_string , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator >&&)', 'el::base::utils::CommandLineArgs::hasParamWithValue(char const*) const', 'el::base::utils::CommandLineArgs::hasParam(char const*) const', '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8ne180100ILi0EEEPKc', 'std::__1::basic_string , std::__1::allocator >::substr[abi:ne180100](unsigned long, unsigned long) const', 'std::__1::vector , std::__1::allocator >, std::__1::allocator , std::__1::allocator > > >::push_back[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void*>*> >, bool> std::__1::unordered_map , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >, std::__1::hash , std::__1::allocator > >, std::__1::equal_to , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, std::__1::basic_string , std::__1::allocator > > > >::insert[abi:ne180100] , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void>(std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >::~pair()', 'strstr', 'std::__1::basic_string , std::__1::allocator >::operator=[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::basic_string , std::__1::allocator >::find_first_of[abi:ne180100](char, unsigned long) const']

14 14 el::base::utils::CommandLineArgs::setArgs(int,char**) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1426
12 20 13 :

['std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int const&>(std::__1::basic_string , std::__1::allocator > const&, int const&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rbegin[abi:ne180100]()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int>(std::__1::basic_string , std::__1::allocator > const&, int&&)', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator->[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >, int>::~pair()', 'el::base::priority(el::Level)', 'bool std::__1::operator!=[abi:ne180100] , std::__1::allocator >, el::Level> const*>, std::__1::__wrap_iter , std::__1::allocator >, el::Level>*> >(std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> > const&, std::__1::reverse_iterator , std::__1::allocator >, el::Level>*> > const&)', '_ZNSt3__116reverse_iteratorINS_11__wrap_iterIPKNS_4pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN2el5LevelEEEEEEC2B8ne180100INS1_IPSB_EEvEERKNS0_IT_EE', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator++[abi:ne180100]()', 'el::base::utils::Str::wildCardMatch(char const*, char const*)', 'std::__1::pair , std::__1::allocator >, int>, std::__1::__tree_node , std::__1::allocator >, int>, void*>*, long> >, bool> std::__1::map , std::__1::allocator >, int, std::__1::less , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, int> > >::insert[abi:ne180100] , std::__1::allocator >, int>, void>(std::__1::pair , std::__1::allocator >, int>&&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rend[abi:ne180100]()']

12 20 el::base::VRegistry::priority_allowed(int,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2227
10 10 5 :

['std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)', '__clang_call_terminate', '__cxa_rethrow', '__cxa_end_catch', '__cxa_begin_catch']

10 10 el::base::LogFormat⪙::base::TypedConfigurations::unsafeGetConfigByRef (el::Level,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,charconst*) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2022
2 2 1 :

['err']

2 2 generate_system_random_bytes call site: 00000 /src/monero/monero/src/crypto/random.c:91
0 34 1 :

['el::Configurations::unsafeSet(el::Level, el::ConfigurationType, std::__1::basic_string , std::__1::allocator > const&)']

0 38 el::Configurations::unsafeSetGlobally(el::ConfigurationType,std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:650
0 3 2 :

['el::base::LogFormat::operator=(el::base::LogFormat const&)', 'std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)']

0 3 voidel::base::TypedConfigurations::setValue (el::Level,el::base::LogFormatconst&,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2050
0 0 None 4 4 el::base::TypedConfigurations::getULong(std::__1::basic_string ,std::__1::allocator >) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1838
0 0 None 2 556 el::base::RegisteredLoggers::get(std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2000
0 0 None 2 2 generate_system_random_bytes call site: 00000 /src/monero/monero/src/crypto/random.c:72
0 0 None 0 514 el::Logger::configure(el::Configurationsconst&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:748
0 0 None 0 0 epee::mlocker::lock_page(unsignedlong) call site: 00000 /src/monero/monero/contrib/epee/src/mlocker.cpp:177

Runtime coverage analysis

Covered functions
244
Functions that are reachable but not covered
729
Reachable functions
1113
Percentage of reachable functions covered
34.5%
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/monero/monero/tests/fuzz/tx-extra.cpp 1
/src/monero/monero/src/cryptonote_basic/cryptonote_format_utils.cpp 1
/src/monero/monero/contrib/epee/include/span.h 17
/src/monero/monero/src/serialization/binary_archive.h 18
/usr/local/include/boost/variant/variant.hpp 148
/usr/local/include/boost/type_traits/aligned_storage.hpp 4
/src/monero/monero/src/serialization/variant.h 8
/usr/local/include/boost/endian/conversion.hpp 3
/src/monero/monero/src/cryptonote_basic/tx_extra.h 32
/src/monero/monero/src/serialization/serialization.h 13
/src/monero/monero/src/serialization/string.h 1
/src/monero/monero/src/common/varint.h 2
/usr/local/include/boost/variant/detail/visitation_impl.hpp 126
/usr/local/include/boost/variant/detail/cast_storage.hpp 6
/usr/local/include/boost/variant/detail/forced_return.hpp 2
/usr/local/include/boost/type_traits/integral_constant.hpp 1
/usr/local/include/boost/variant/detail/initializer.hpp 6
/src/monero/monero/src/serialization/containers.h 1
/src/monero/monero/src/serialization/container.h 4
/src/monero/monero/external/easylogging++/easylogging++.cc 78
/src/monero/monero/external/easylogging++/easylogging++.h 96
/usr/include/stdlib.h 1
/usr/include/x86_64-linux-gnu/sys/stat.h 1
/src/monero/monero/contrib/epee/include/string_tools.h 1
/src/monero/monero/contrib/epee/src/hex.cpp 4
/usr/local/bin/../include/c++/v1/stdexcept 1

Fuzzer: transaction_fuzz_tests

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 1463 60.6%
gold [1:9] 19 0.78%
yellow [10:29] 18 0.74%
greenyellow [30:49] 9 0.37%
lawngreen 50+ 903 37.4%
All colors 2412 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
1596 4064 3 :

['_ZN2el4base6WriterlsIN6crypto4hashEEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS7_', 'cryptonote::get_transaction_hash(cryptonote::transaction const&)', '_ZN2el4base6WriterlsIA80_cEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS6_']

4439 7728 cryptonote::expand_transaction_1(cryptonote::transaction&,bool) call site: 00000 /src/monero/monero/src/cryptonote_basic/cryptonote_format_utils.cpp:161
1584 4052 3 :

['_ZN2el4base6WriterlsIN6crypto4hashEEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS7_', '_ZN2el4base6WriterlsIA75_cEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS6_', 'cryptonote::get_transaction_hash(cryptonote::transaction const&)']

4427 7716 cryptonote::expand_transaction_1(cryptonote::transaction&,bool) call site: 00000 /src/monero/monero/src/cryptonote_basic/cryptonote_format_utils.cpp:185
788 788 1 :

['_ZN2el4base6WriterlsIA70_cEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS6_']

4439 7728 cryptonote::expand_transaction_1(cryptonote::transaction&,bool) call site: 00000 /src/monero/monero/src/cryptonote_basic/cryptonote_format_utils.cpp:179
776 776 1 :

['_ZN2el4base6WriterlsIA75_cEENSt3__19enable_ifIXntsr3std11is_integralIT_EE5valueERS1_E4typeERKS6_']

4427 7716 cryptonote::expand_transaction_1(cryptonote::transaction&,bool) call site: 00000 /src/monero/monero/src/cryptonote_basic/cryptonote_format_utils.cpp:155
44 118 11 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::unordered_map , std::__1::allocator >, std::__1::hash , std::__1::equal_to , std::__1::allocator , std::__1::allocator > > > >::empty[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_ostream >& std::__1::operator<<[abi:ne180100] >(std::__1::basic_ostream >&, char const*)', 'el::base::utils::File::extractPathFromFilename(std::__1::basic_string , std::__1::allocator > const&, char const*)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::empty[abi:ne180100]() const', 'el::base::TypedConfigurations::resolveFilename(std::__1::basic_string , std::__1::allocator > const&)', 'el::base::TypedConfigurations::insertFile(el::Level, std::__1::basic_string , std::__1::allocator > const&)::$_0::operator()(el::Level) const', 'std::__1::basic_string , std::__1::allocator >::empty[abi:ne180100]() const', 'el::LevelHelper::convertToString(el::Level)', 'el::base::utils::File::createPath(std::__1::basic_string , std::__1::allocator > const&)']

44 118 el::base::TypedConfigurations::insertFile(el::Level,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1886
14 14 13 :

['std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >&>::type, std::__1::__unwrap_ref_decay , std::__1::allocator > >::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator > >(std::__1::basic_string , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator >&&)', 'el::base::utils::CommandLineArgs::hasParamWithValue(char const*) const', 'el::base::utils::CommandLineArgs::hasParam(char const*) const', '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8ne180100ILi0EEEPKc', 'std::__1::basic_string , std::__1::allocator >::substr[abi:ne180100](unsigned long, unsigned long) const', 'std::__1::vector , std::__1::allocator >, std::__1::allocator , std::__1::allocator > > >::push_back[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void*>*> >, bool> std::__1::unordered_map , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >, std::__1::hash , std::__1::allocator > >, std::__1::equal_to , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, std::__1::basic_string , std::__1::allocator > > > >::insert[abi:ne180100] , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void>(std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >::~pair()', 'strstr', 'std::__1::basic_string , std::__1::allocator >::operator=[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::basic_string , std::__1::allocator >::find_first_of[abi:ne180100](char, unsigned long) const']

14 14 el::base::utils::CommandLineArgs::setArgs(int,char**) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1426
12 20 13 :

['std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int const&>(std::__1::basic_string , std::__1::allocator > const&, int const&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rbegin[abi:ne180100]()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int>(std::__1::basic_string , std::__1::allocator > const&, int&&)', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator->[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >, int>::~pair()', 'el::base::priority(el::Level)', 'bool std::__1::operator!=[abi:ne180100] , std::__1::allocator >, el::Level> const*>, std::__1::__wrap_iter , std::__1::allocator >, el::Level>*> >(std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> > const&, std::__1::reverse_iterator , std::__1::allocator >, el::Level>*> > const&)', '_ZNSt3__116reverse_iteratorINS_11__wrap_iterIPKNS_4pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN2el5LevelEEEEEEC2B8ne180100INS1_IPSB_EEvEERKNS0_IT_EE', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator++[abi:ne180100]()', 'el::base::utils::Str::wildCardMatch(char const*, char const*)', 'std::__1::pair , std::__1::allocator >, int>, std::__1::__tree_node , std::__1::allocator >, int>, void*>*, long> >, bool> std::__1::map , std::__1::allocator >, int, std::__1::less , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, int> > >::insert[abi:ne180100] , std::__1::allocator >, int>, void>(std::__1::pair , std::__1::allocator >, int>&&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rend[abi:ne180100]()']

12 20 el::base::VRegistry::priority_allowed(int,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2227
10 10 5 :

['std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)', '__clang_call_terminate', '__cxa_rethrow', '__cxa_end_catch', '__cxa_begin_catch']

10 10 el::base::LogFormat⪙::base::TypedConfigurations::unsafeGetConfigByRef (el::Level,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,charconst*) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2022
2 2 1 :

['err']

2 2 generate_system_random_bytes call site: 00000 /src/monero/monero/src/crypto/random.c:91
0 34 1 :

['el::Configurations::unsafeSet(el::Level, el::ConfigurationType, std::__1::basic_string , std::__1::allocator > const&)']

0 38 el::Configurations::unsafeSetGlobally(el::ConfigurationType,std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:650
0 3 2 :

['el::base::LogFormat::operator=(el::base::LogFormat const&)', 'std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)']

0 3 voidel::base::TypedConfigurations::setValue (el::Level,el::base::LogFormatconst&,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2050
0 2 1 :

['cryptonote::transaction::set_hash_valid(bool) const']

0 10 cryptonote::transaction::transaction(cryptonote::transactionconst&) call site: 00000 /src/monero/monero/src/cryptonote_basic/cryptonote_basic.h:358

Runtime coverage analysis

Covered functions
395
Functions that are reachable but not covered
1594
Reachable functions
2311
Percentage of reachable functions covered
31.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
/src/monero/monero/tests/fuzz/transaction.cpp 1
/usr/local/include/boost/utility/value_init.hpp 6
/src/monero/monero/src/cryptonote_basic/cryptonote_basic.h 100
/src/monero/monero/src/ringct/rctTypes.h 29
/usr/local/include/boost/utility/string_ref.hpp 4
/src/monero/monero/src/cryptonote_basic/cryptonote_format_utils.cpp 10
/src/monero/monero/contrib/epee/include/span.h 11
/src/monero/monero/src/serialization/binary_archive.h 52
/src/monero/monero/src/serialization/serialization.h 79
/src/monero/monero/src/common/varint.h 6
/src/monero/monero/src/serialization/containers.h 12
/src/monero/monero/src/serialization/container.h 36
/usr/local/include/boost/variant/variant.hpp 233
/usr/local/include/boost/type_traits/aligned_storage.hpp 10
/src/monero/monero/src/serialization/variant.h 23
/usr/local/include/boost/endian/conversion.hpp 6
/usr/local/include/boost/variant/detail/visitation_impl.hpp 230
/usr/local/include/boost/variant/detail/cast_storage.hpp 16
/usr/local/include/boost/variant/detail/forced_return.hpp 8
/usr/local/include/boost/type_traits/integral_constant.hpp 1
/usr/local/include/boost/variant/detail/initializer.hpp 8
/usr/local/include/boost/variant/detail/apply_visitor_unary.hpp 3
/src/monero/monero/src/serialization/crypto.h 2
/usr/local/include/boost/type_index.hpp 8
/usr/local/include/boost/type_index/stl_type_index.hpp 10
/usr/local/include/boost/variant/get.hpp 34
/usr/local/include/boost/core/addressof.hpp 7
/usr/local/bin/../include/c++/v1/__exception/exception.h 2
/usr/local/include/boost/throw_exception.hpp 9
/usr/local/include/boost/exception/exception.hpp 7
/src/monero/monero/src/ringct/rctTypes.cpp 7
/src/monero/monero/external/easylogging++/easylogging++.cc 78
/src/monero/monero/external/easylogging++/easylogging++.h 115
/usr/include/stdlib.h 1
/usr/include/x86_64-linux-gnu/sys/stat.h 1
/src/monero/monero/src/cryptonote_basic/cryptonote_basic_impl.cpp 1
/src/monero/monero/src/cryptonote_basic/cryptonote_format_utils.h 4
/src/monero/monero/src/crypto/hash.h 3
/src/monero/monero/src/crypto/hash.c 2
/src/monero/monero/src/crypto/keccak.c 4
/src/monero/monero/contrib/epee/include/int-util.h 1
/src/monero/monero/src/cryptonote_basic/cryptonote_format_utils_basic.cpp 1
/src/monero/monero/contrib/epee/src/hex.cpp 3
/src/monero/monero/src/ringct/rctOps.cpp 1
/src/monero/monero/src/crypto/crypto-ops.c 30
/usr/local/include/boost/lexical_cast.hpp 1
/usr/local/include/boost/lexical_cast/try_lexical_convert.hpp 1
/usr/local/include/boost/lexical_cast/detail/converter_lexical.hpp 1
/usr/local/include/boost/lexical_cast/detail/converter_lexical_streams.hpp 8
/usr/local/include/boost/lexical_cast/detail/lcast_unsigned_converters.hpp 5
/usr/local/include/boost/lexical_cast/bad_lexical_cast.hpp 3
/usr/local/bin/../include/c++/v1/typeinfo 1

Fuzzer: block_fuzz_tests

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 1435 65.8%
gold [1:9] 1 0.04%
yellow [10:29] 1 0.04%
greenyellow [30:49] 7 0.32%
lawngreen 50+ 734 33.7%
All colors 2178 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
44 118 11 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::unordered_map , std::__1::allocator >, std::__1::hash , std::__1::equal_to , std::__1::allocator , std::__1::allocator > > > >::empty[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_ostream >& std::__1::operator<<[abi:ne180100] >(std::__1::basic_ostream >&, char const*)', 'el::base::utils::File::extractPathFromFilename(std::__1::basic_string , std::__1::allocator > const&, char const*)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::empty[abi:ne180100]() const', 'el::base::TypedConfigurations::resolveFilename(std::__1::basic_string , std::__1::allocator > const&)', 'el::base::TypedConfigurations::insertFile(el::Level, std::__1::basic_string , std::__1::allocator > const&)::$_0::operator()(el::Level) const', 'std::__1::basic_string , std::__1::allocator >::empty[abi:ne180100]() const', 'el::LevelHelper::convertToString(el::Level)', 'el::base::utils::File::createPath(std::__1::basic_string , std::__1::allocator > const&)']

44 118 el::base::TypedConfigurations::insertFile(el::Level,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1886
14 14 13 :

['std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >&>::type, std::__1::__unwrap_ref_decay , std::__1::allocator > >::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator > >(std::__1::basic_string , std::__1::allocator >&, std::__1::basic_string , std::__1::allocator >&&)', 'el::base::utils::CommandLineArgs::hasParamWithValue(char const*) const', 'el::base::utils::CommandLineArgs::hasParam(char const*) const', '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8ne180100ILi0EEEPKc', 'std::__1::basic_string , std::__1::allocator >::substr[abi:ne180100](unsigned long, unsigned long) const', 'std::__1::vector , std::__1::allocator >, std::__1::allocator , std::__1::allocator > > >::push_back[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void*>*> >, bool> std::__1::unordered_map , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >, std::__1::hash , std::__1::allocator > >, std::__1::equal_to , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, std::__1::basic_string , std::__1::allocator > > > >::insert[abi:ne180100] , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >, void>(std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >&&)', 'std::__1::pair , std::__1::allocator >, std::__1::basic_string , std::__1::allocator > >::~pair()', 'strstr', 'std::__1::basic_string , std::__1::allocator >::operator=[abi:ne180100](std::__1::basic_string , std::__1::allocator >&&)', 'std::__1::basic_string , std::__1::allocator >::find_first_of[abi:ne180100](char, unsigned long) const']

14 14 el::base::utils::CommandLineArgs::setArgs(int,char**) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1426
12 20 13 :

['std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int const&>(std::__1::basic_string , std::__1::allocator > const&, int const&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rbegin[abi:ne180100]()', 'std::__1::basic_string , std::__1::allocator >::c_str[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator > const&>::type, std::__1::__unwrap_ref_decay ::type> std::__1::make_pair[abi:ne180100] , std::__1::allocator > const&, int>(std::__1::basic_string , std::__1::allocator > const&, int&&)', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator->[abi:ne180100]() const', 'std::__1::pair , std::__1::allocator >, int>::~pair()', 'el::base::priority(el::Level)', 'bool std::__1::operator!=[abi:ne180100] , std::__1::allocator >, el::Level> const*>, std::__1::__wrap_iter , std::__1::allocator >, el::Level>*> >(std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> > const&, std::__1::reverse_iterator , std::__1::allocator >, el::Level>*> > const&)', '_ZNSt3__116reverse_iteratorINS_11__wrap_iterIPKNS_4pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN2el5LevelEEEEEEC2B8ne180100INS1_IPSB_EEvEERKNS0_IT_EE', 'std::__1::reverse_iterator , std::__1::allocator >, el::Level> const*> >::operator++[abi:ne180100]()', 'el::base::utils::Str::wildCardMatch(char const*, char const*)', 'std::__1::pair , std::__1::allocator >, int>, std::__1::__tree_node , std::__1::allocator >, int>, void*>*, long> >, bool> std::__1::map , std::__1::allocator >, int, std::__1::less , std::__1::allocator > >, std::__1::allocator , std::__1::allocator > const, int> > >::insert[abi:ne180100] , std::__1::allocator >, int>, void>(std::__1::pair , std::__1::allocator >, int>&&)', 'std::__1::vector , std::__1::allocator >, el::Level>, std::__1::allocator , std::__1::allocator >, el::Level> > >::rend[abi:ne180100]()']

12 20 el::base::VRegistry::priority_allowed(int,std::__1::basic_string ,std::__1::allocator >const&) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:2227
10 10 5 :

['std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)', '__clang_call_terminate', '__cxa_rethrow', '__cxa_end_catch', '__cxa_begin_catch']

10 10 el::base::LogFormat⪙::base::TypedConfigurations::unsafeGetConfigByRef (el::Level,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,charconst*) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2022
2 2 1 :

['err']

2 2 generate_system_random_bytes call site: 00000 /src/monero/monero/src/crypto/random.c:91
0 34 1 :

['el::Configurations::unsafeSet(el::Level, el::ConfigurationType, std::__1::basic_string , std::__1::allocator > const&)']

0 38 el::Configurations::unsafeSetGlobally(el::ConfigurationType,std::__1::basic_string ,std::__1::allocator >const&,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:650
0 3 2 :

['el::base::LogFormat::operator=(el::base::LogFormat const&)', 'std::__1::unordered_map , std::__1::equal_to , std::__1::allocator > >::at(el::Level const&)']

0 3 voidel::base::TypedConfigurations::setValue (el::Level,el::base::LogFormatconst&,std::__1::unordered_map ,std::__1::equal_to ,std::__1::allocator >>*,bool) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.h:2050
0 2 1 :

['cryptonote::transaction::set_hash_valid(bool) const']

0 10 cryptonote::transaction::transaction(cryptonote::transactionconst&) call site: 00000 /src/monero/monero/src/cryptonote_basic/cryptonote_basic.h:358
0 2 1 :

['cryptonote::transaction::set_blob_size_valid(bool) const']

0 6 cryptonote::transaction::transaction(cryptonote::transactionconst&) call site: 00000 /src/monero/monero/src/cryptonote_basic/cryptonote_basic.h:363
0 0 None 315 315 variant_reader ,boost::variant ,boost::mpl::l_iter ,cryptonote::txout_to_scripthash,boost::mpl::l_item ,cryptonote::txout_to_key,boost::mpl::l_item ,cryptonote::txout_to_tagged_key,boost::mpl::l_end>>>>,boost::mpl::l_iter >::read(binary_archive &,boost::variant &,unsignedchar) call site: 00000 /src/monero/monero/src/serialization/variant.h:76
0 0 None 315 315 variant_reader ,boost::variant ,boost::mpl::l_iter ,cryptonote::txout_to_key,boost::mpl::l_item ,cryptonote::txout_to_tagged_key,boost::mpl::l_end>>>,boost::mpl::l_iter >::read(binary_archive &,boost::variant &,unsignedchar) call site: 00000 /src/monero/monero/src/serialization/variant.h:76
0 0 None 4 4 el::base::TypedConfigurations::getULong(std::__1::basic_string ,std::__1::allocator >) call site: 00000 /src/monero/monero/external/easylogging++/easylogging++.cc:1838

Runtime coverage analysis

Covered functions
377
Functions that are reachable but not covered
1482
Reachable functions
2222
Percentage of reachable functions covered
33.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/monero/monero/tests/fuzz/block.cpp 1
/usr/local/include/boost/utility/value_init.hpp 6
/src/monero/monero/src/cryptonote_basic/cryptonote_basic.h 113
/src/monero/monero/src/ringct/rctTypes.h 29
/usr/local/include/boost/utility/string_ref.hpp 5
/src/monero/monero/src/cryptonote_basic/cryptonote_format_utils.cpp 16
/src/monero/monero/contrib/epee/include/span.h 15
/src/monero/monero/src/serialization/binary_archive.h 56
/src/monero/monero/src/serialization/serialization.h 86
/src/monero/monero/src/common/varint.h 10
/usr/local/include/boost/endian/conversion.hpp 6
/src/monero/monero/src/serialization/containers.h 14
/src/monero/monero/src/serialization/container.h 42
/usr/local/include/boost/variant/variant.hpp 217
/usr/local/include/boost/type_traits/aligned_storage.hpp 9
/src/monero/monero/src/serialization/variant.h 23
/usr/local/include/boost/variant/detail/visitation_impl.hpp 210
/usr/local/include/boost/variant/detail/cast_storage.hpp 12
/usr/local/include/boost/variant/detail/forced_return.hpp 7
/usr/local/include/boost/type_traits/integral_constant.hpp 1
/usr/local/include/boost/variant/detail/initializer.hpp 8
/usr/local/include/boost/variant/detail/apply_visitor_unary.hpp 3
/src/monero/monero/src/serialization/crypto.h 2
/usr/local/include/boost/type_index.hpp 4
/usr/local/include/boost/type_index/stl_type_index.hpp 6
/usr/local/include/boost/variant/get.hpp 26
/usr/local/include/boost/core/addressof.hpp 5
/usr/local/bin/../include/c++/v1/__exception/exception.h 2
/usr/local/include/boost/throw_exception.hpp 5
/usr/local/include/boost/exception/exception.hpp 7
/src/monero/monero/src/ringct/rctTypes.cpp 5
/src/monero/monero/external/easylogging++/easylogging++.cc 78
/src/monero/monero/external/easylogging++/easylogging++.h 104
/usr/include/stdlib.h 1
/usr/include/x86_64-linux-gnu/sys/stat.h 1
/src/monero/monero/src/cryptonote_basic/cryptonote_format_utils.h 11
/src/monero/monero/src/crypto/hash.h 3
/src/monero/monero/src/crypto/hash.c 2
/src/monero/monero/src/crypto/keccak.c 4
/src/monero/monero/contrib/epee/include/int-util.h 1
/src/monero/monero/src/cryptonote_basic/cryptonote_format_utils_basic.cpp 1
/src/monero/monero/src/crypto/tree-hash.c 2
/src/monero/monero/src/serialization/string.h 1
/src/monero/monero/contrib/epee/include/string_tools.h 2
/src/monero/monero/contrib/epee/src/hex.cpp 6
/usr/local/bin/../include/c++/v1/stdexcept 1

Fuzzer: load-from-json_fuzz_tests

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 2507 73.1%
gold [1:9] 18 0.52%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 901 26.2%
All colors 3426 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
44 118 11 :

['std::__1::basic_string , std::__1::allocator >::size[abi:ne180100]() const', 'std::__1::unordered_map , std::__1::allocator >, std::__1::hash , std::__1::equal_to , std::__1::allocator , std::__1::allocator > > > >::empty[abi:ne180100]() const', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_ostream >& std::__1::operator<<[abi:ne180100] >(std::__1::basic_ostream >&, char const*)', 'el::base::utils::File::extractPathFromFilename(std::__1::basic_string , std::__1::allocator > const&, char const*)', 'std::__1::unordered_map > >, std::__1::hash , std::__1::equal_to , std::__1::allocator > > > > >::empty[abi:ne180100]() const', 'el::base::TypedConfigurations::resolveFilename(std::__1::basic_string , std::__1::allocator > const&)', 'el::base::TypedConfigurations::insertFile(el::Level, std::__1::basic_string , std::__1::allocator > const&)::$_0::operator()(el::Level) const', 'std::__1::basic_string , std::__1::allocator