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

Fuzzer details

Fuzzer: phashmap_fuzz

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 6 5.26%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 1 0.87%
lawngreen 50+ 107 93.8%
All colors 114 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
114 114 1 :

['phmap::priv::raw_hash_set , phmap::Hash , phmap::EqualTo , std::__1::allocator > >::drop_deletes_without_resize()']

114 114 phmap::priv::raw_hash_set ,phmap::Hash ,phmap::EqualTo ,std::__1::allocator >>::rehash_and_grow_if_necessary() call site: 00000 /src/parallel-hashmap/./parallel_hashmap/phmap.h:2124
4 4 1 :

['void phmap::priv::SanitizerPoisonObject >(phmap::priv::map_slot_type const*)']

4 4 phmap::priv::raw_hash_set ,phmap::Hash ,phmap::EqualTo ,std::__1::allocator >>::set_ctrl(unsignedlong,signedchar) call site: 00000 /src/parallel-hashmap/./parallel_hashmap/phmap.h:2255
0 0 None 41 47 phmap::priv::raw_hash_set ,std::__1::allocator >,std::__1::basic_string ,std::__1::allocator >>,phmap::Hash ,std::__1::allocator >>,phmap::EqualTo ,std::__1::allocator >>,std::__1::allocator ,std::__1::allocator >const,std::__1::basic_string ,std::__1::allocator >>>>::destroy_slots() call site: 00000 /src/parallel-hashmap/./parallel_hashmap/phmap.h:2014
0 0 1 :

['_ZNSt3__14swapIPKN5phmap4priv12raw_hash_setINS2_17FlatHashMapPolicyIjiEENS1_4HashIjEENS1_7EqualToIjEENS_9allocatorINS_4pairIKjiEEEEEEEENS_9enable_ifIXaasr21is_move_constructibleIT_EE5valuesr18is_move_assignableISJ_EE5valueEvE4typeERSJ_SM_']

0 98 phmap::priv::operator==(phmap::priv::raw_hash_set ,phmap::Hash ,phmap::EqualTo ,std::__1::allocator >>const&,phmap::priv::raw_hash_set ,phmap::Hash ,phmap::EqualTo ,std::__1::allocator >>const&) call site: 00000 /src/parallel-hashmap/./parallel_hashmap/phmap.h:1829

Runtime coverage analysis

Covered functions
168
Functions that are reachable but not covered
43
Reachable functions
240
Percentage of reachable functions covered
82.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.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
phashmap_fuzz.cc 3
parallel-hashmap/./parallel_hashmap/phmap.h 57
parallel-hashmap/./parallel_hashmap/phmap_base.h 17
parallel-hashmap/./parallel_hashmap/phmap_dump.h 7

Analyses and suggestions

Optimal target analysis

Remaining optimal interesting functions

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

Func name Functions filename Arg count Args Function depth hitcount instr count bb count cyclomatic complexity Reachable functions Incoming references total cyclomatic complexity Unreached complexity
std::__1::pair ,phmap::Hash ,phmap::EqualTo ,std::__1::allocator >>::iterator,bool>phmap::priv::raw_hash_set ,phmap::Hash ,phmap::EqualTo ,std::__1::allocator >>::emplace_decomposable ,std::__1::tuple >(unsignedintconst&,unsignedlong,std::__1::piecewise_construct_tconst&,std::__1::tuple &&,std::__1::tuple &&) /src/parallel-hashmap/./parallel_hashmap/phmap.h 7 ['struct.std::__1::pair.4 *', 'class.phmap::priv::raw_hash_set *', 'int *', 'size_t ', 'class.phmap::priv::HashtablezInfoHandle *', 'class.std::__1::tuple.54 *', 'class.std::__1::tuple.54 *'] 5 0 81 6 3 182 0 209 116

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

Functions statically reachable by fuzzers
81.0%
159 / 197
Cyclomatic complexity statically reachable by fuzzers
83.0%
411 / 494

All functions overview

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

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