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

Project functions overview

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

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

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

Fuzzer details

Fuzzer: libarchive_fuzzer

Call tree

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

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 2215 49.4%
gold [1:9] 538 12.0%
yellow [10:29] 307 6.85%
greenyellow [30:49] 68 1.51%
lawngreen 50+ 1353 30.1%
All colors 4481 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
2006 10624 8 :

['read_StreamsInfo', 'read_Bools', 'malloc', 'calloc', 'parse_7zip_uint64', 'read_Times', 'archive_le32dec.4275', 'header_bytes']

2006 10624 read_Header call site: 02471 /src/libarchive/libarchive/archive_read_support_format_7zip.c:2750
2004 6982 7 :

['read_Bools', 'read_Times', 'malloc', 'calloc', 'parse_7zip_uint64', 'archive_le32dec.4275', 'header_bytes']

2004 6982 read_Header call site: 02504 /src/libarchive/libarchive/archive_read_support_format_7zip.c:2928
873 875 2 :

['archive_entry_set_size', 'read_symlink_stored']

873 875 read_header call site: 00853 /src/libarchive/libarchive/archive_read_support_format_rar.c:1856
648 648 1 :

['lha_replace_path_separator']

648 1433 archive_read_format_lha_read_header call site: 00653 /src/libarchive/libarchive/archive_read_support_format_lha.c:692
635 635 1 :

['cab_convert_path_separator_2']

635 643 archive_read_format_cab_read_header call site: 02654 /src/libarchive/libarchive/archive_read_support_format_cab.c:985
513 2055 19 :

['malloc', 'archive_entry_set_ctime', 'archive_entry_set_mode', 'archive_set_error', 'archive_entry_set_mtime', 'archive_entry_copy_fflags_text', '__errno_location', 'archive_entry_set_atime', 'archive_string_conversion_charset_name', 'crc32', 'strcpy', 'realloc', 'free', 'archive_read_format_7zip_read_data', 'archive_entry_set_size', 'archive_entry_set_is_data_encrypted', '_archive_entry_copy_pathname_l', 'archive_string_conversion_from_charset', '_archive_entry_copy_symlink_l']

513 2055 archive_read_format_7zip_read_header call site: 02517 /src/libarchive/libarchive/archive_read_support_format_7zip.c:902
499 499 1 :

['read_Bools']

501 995 read_Digests call site: 02400 /src/libarchive/libarchive/archive_read_support_format_7zip.c:2098
499 499 1 :

['read_Bools']

499 2002 read_Times call site: 02492 /src/libarchive/libarchive/archive_read_support_format_7zip.c:3100
316 1448 8 :

['seek_pack', 'malloc', 'archive_set_error', 'extract_pack_stream', 'get_uncompressed_data', 'free', 'read_consume', 'folder_uncompressed_size']

316 1742 setup_decode_folder call site: 02323 /src/libarchive/libarchive/archive_read_support_format_7zip.c:3806
316 316 1 :

['get_uncompressed_data']

316 316 read_stream call site: 02275 /src/libarchive/libarchive/archive_read_support_format_7zip.c:3630
242 242 1 :

['parse_rockridge']

246 810 parse_file_info call site: 03688 /src/libarchive/libarchive/archive_read_support_format_iso9660.c:2035
235 1485 7 :

['zip_read_mac_metadata', '__archive_read_consume', '__archive_read_reset_passphrase', 'zip_read_local_file_header', 'archive_filter_bytes', '__archive_read_seek', '__archive_rb_tree_find_node']

235 1485 archive_read_format_zip_seekable_read_header call site: 04320 /src/libarchive/libarchive/archive_read_support_format_zip.c:4306

Runtime coverage analysis

Covered functions
854
Functions that are reachable but not covered
231
Reachable functions
907
Percentage of reachable functions covered
74.53%
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/libarchive_fuzzer.cc 1
/src/libarchive/libarchive/archive_read.c 33
/src/libarchive/libarchive/archive_entry.c 99
/src/libarchive/libarchive/archive_read_support_filter_all.c 1
/src/libarchive/libarchive/archive_check_magic.c 6
/src/libarchive/libarchive/archive_util.c 5
/src/libarchive/libarchive/archive_string_sprintf.c 4
/src/libarchive/libarchive/archive_string.c 72
/src/libarchive/libarchive/archive_read_support_filter_bzip2.c 1
/src/libarchive/libarchive/archive_read_support_filter_compress.c 1
/src/libarchive/libarchive/archive_read_support_filter_gzip.c 1
/src/libarchive/libarchive/archive_read_support_filter_xz.c 3
/src/libarchive/libarchive/archive_read_support_filter_uu.c 1
/src/libarchive/libarchive/archive_read_support_filter_rpm.c 1
/src/libarchive/libarchive/archive_read_support_filter_lrzip.c 1
/src/libarchive/libarchive/archive_read_support_filter_lzop.c 1
/src/libarchive/libarchive/archive_read_support_filter_grzip.c 1
/src/libarchive/libarchive/archive_read_support_filter_lz4.c 1
/src/libarchive/libarchive/archive_read_support_filter_zstd.c 1
/src/libarchive/libarchive/archive_read_support_format_all.c 1
/src/libarchive/libarchive/archive_read_support_format_ar.c 11
/src/libarchive/libarchive/archive_read_support_format_cpio.c 8
/src/libarchive/libarchive/archive_endian.h 9
/src/libarchive/libarchive/archive_read_support_format_empty.c 4
/src/libarchive/libarchive/archive_read_support_format_lha.c 37
/src/libarchive/libarchive/archive_time.c 2
/src/libarchive/libarchive/archive_read_support_format_mtree.c 34
/src/libarchive/libarchive/archive_rb.c 11
/src/libarchive/libarchive/archive_entry_link_resolver.c 8
/src/libarchive/libarchive/archive_pack_dev.c 2
/src/libarchive/libarchive/archive_acl.c 14
/src/libarchive/libarchive/archive_entry_xattr.c 2
/src/libarchive/libarchive/archive_entry_sparse.c 2
/src/libarchive/libarchive/archive_read_support_format_tar.c 54
/src/libarchive/libarchive/archive_read_support_format_xar.c 49
/src/libarchive/libarchive/archive_read_support_format_warc.c 19
/src/libarchive/libarchive/archive_read_support_format_7zip.c 53
/src/libarchive/libarchive/archive_read_support_format_cab.c 43
/src/libarchive/libarchive/archive_read_support_format_rar.c 60
/src/libarchive/libarchive/archive_read_support_format_rar5.c 98
/src/libarchive/libarchive/archive_blake2sp_ref.c 6
/src/libarchive/libarchive/archive_blake2_impl.h 5
/src/libarchive/libarchive/archive_blake2s_ref.c 9
/src/libarchive/libarchive/archive_read_support_format_iso9660.c 50
/src/libarchive/libarchive/archive_read_support_format_zip.c 46
/src/libarchive/libarchive/archive_read_add_passphrase.c 7
/src/libarchive/libarchive/archive_virtual.c 5
/src/libarchive/libarchive/archive_read_support_format_raw.c 6
/src/libarchive/libarchive/archive_read_set_options.c 4
/src/libarchive/libarchive/archive_options.c 3
/src/libarchive/libarchive/archive_read_open_memory.c 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
parse_file /src/libarchive/libarchive/archive_read_support_format_mtree.c 5 ['N/A', 'N/A', 'N/A', 'N/A', 'N/A'] 10 0 868 155 55 158 0 1056 269
Ppmd7_EncodeSymbol /src/libarchive/libarchive/archive_ppmd7.c 3 ['N/A', 'N/A', 'int'] 7 0 757 58 17 23 0 149 149
archive_entry_acl_from_text_w /src/libarchive/libarchive/archive_entry.c 3 ['N/A', 'N/A', 'int'] 8 0 25 3 2 28 0 207 133
archive_entry_acl_text_w /src/libarchive/libarchive/archive_entry.c 2 ['N/A', 'int'] 11 0 53 6 3 84 0 713 105
read_mtree /src/libarchive/libarchive/archive_read_support_format_mtree.c 2 ['N/A', 'N/A'] 10 0 364 65 24 55 0 425 97
grzip_bidder_init /src/libarchive/libarchive/archive_read_support_filter_grzip.c 1 ['N/A'] 6 0 26 3 2 42 0 179 89
uudecode_filter_read /src/libarchive/libarchive/archive_read_support_filter_uu.c 2 ['N/A', 'N/A'] 7 0 1285 184 69 30 0 240 83
lz4_filter_read /src/libarchive/libarchive/archive_read_support_filter_lz4.c 2 ['N/A', 'N/A'] 9 0 265 40 12 35 0 226 71
XXH32_update /src/libarchive/libarchive/xxhash.c 3 ['N/A', 'N/A', 'int'] 1 0 1827 180 61 2 0 65 65
header_odc /src/libarchive/libarchive/archive_read_support_format_cpio.c 5 ['N/A', 'N/A', 'N/A', 'N/A', 'N/A'] 9 0 171 12 6 46 0 238 56

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

Functions statically reachable by fuzzers
74.0%
948 / 1282
Cyclomatic complexity statically reachable by fuzzers
85.0%
8469 / 10011

All functions overview

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

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

Runtime coverage analysis

This section shows analysis of runtime coverage data.

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

Complex functions with low coverage

Func name Function total lines Lines covered at runtime percentage covered Reached by fuzzers
archive_entry_linkresolver_set_strategy 33 8 24.24% ['libarchive_fuzzer']
_archive_set_options 56 24 42.85% ['libarchive_fuzzer']
consume_header 46 22 47.82% ['libarchive_fuzzer']
lz4_filter_read 70 33 47.14% ['libarchive_fuzzer']
lz4_filter_read_descriptor 74 39 52.70% ['libarchive_fuzzer']
lz4_filter_read_data_block 105 44 41.90% ['libarchive_fuzzer']
xz_lzma_bidder_init 42 20 47.61% ['libarchive_fuzzer']
lzip_tail 41 19 46.34% ['libarchive_fuzzer']
lzma_bidder_bid 49 26 53.06% ['libarchive_fuzzer']
archive_read_format_7zip_read_header 162 19 11.72% ['libarchive_fuzzer']
read_stream 77 11 14.28% ['libarchive_fuzzer']
extract_pack_stream 129 57 44.18% ['libarchive_fuzzer']
decompress 115 32 27.82% ['libarchive_fuzzer']
case_7Z_LZMA2 224 28 12.5%
setup_decode_folder 181 29 16.02% ['libarchive_fuzzer']
init_decompression 38 11 28.94% ['libarchive_fuzzer']
read_Header 284 84 29.57% ['libarchive_fuzzer']
read_Times 59 30 50.84% ['libarchive_fuzzer']
free_decompression 35 18 51.42% ['libarchive_fuzzer']
cab_next_cfdata 114 56 49.12% ['libarchive_fuzzer']
cab_consume_cfdata 80 11 13.75% ['libarchive_fuzzer']
cab_read_ahead_cfdata_lzx 99 45 45.45% ['libarchive_fuzzer']
lzx_read_blocks 266 25 9.398% ['libarchive_fuzzer']
lzx_br_fillup 59 22 37.28% ['libarchive_fuzzer']
archive_read_format_cab_read_data_skip 34 11 32.35% ['libarchive_fuzzer']
archive_read_format_cpio_read_header 75 33 44.0% ['libarchive_fuzzer']
isEVD 43 10 23.25% ['libarchive_fuzzer']
parse_file_info 206 96 46.60% ['libarchive_fuzzer']
heap_add_entry 45 22 48.88% ['libarchive_fuzzer']
read_CE 39 12 30.76% ['libarchive_fuzzer']
lha_read_file_extended_header 259 97 37.45% ['libarchive_fuzzer']
lzh_make_huffman_table 151 79 52.31% ['libarchive_fuzzer']
read_header 438 206 47.03% ['libarchive_fuzzer']
parse_escapes 70 13 18.57% ['libarchive_fuzzer']
read_exttime 68 22 32.35% ['libarchive_fuzzer']
rar_read_ahead 32 17 53.12% ['libarchive_fuzzer']
archive_read_format_rar_seek_data 128 12 9.375% ['libarchive_fuzzer']
verify_checksums 37 11 29.72% ['libarchive_fuzzer']
archive_read_format_tar_options 31 14 45.16% ['libarchive_fuzzer']
tar_read_header 210 111 52.85% ['libarchive_fuzzer']
header_pax_extension 205 92 44.87% ['libarchive_fuzzer']
pax_attribute 467 40 8.565% ['libarchive_fuzzer']
xar_read_header 168 17 10.11% ['libarchive_fuzzer']
read_toc 100 30 30.0% ['libarchive_fuzzer']
xml_end 325 59 18.15% ['libarchive_fuzzer']
xml_data 218 96 44.03% ['libarchive_fuzzer']
parse_time 49 9 18.36% ['libarchive_fuzzer']
decompression_init 120 19 15.83% ['libarchive_fuzzer']
archive_read_format_zip_options 38 15 39.47% ['libarchive_fuzzer']
read_decryption_header 150 67 44.66% ['libarchive_fuzzer']
archive_read_format_zip_seekable_read_header 53 20 37.73% ['libarchive_fuzzer']
get_sconv_object 33 17 51.51% ['libarchive_fuzzer']
setup_converter 84 28 33.33% ['libarchive_fuzzer']
utf16_to_unicode 38 14 36.84% ['libarchive_fuzzer']
XXH32_update_endian 50 12 24.0%

Files and Directories in report

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

Files in report

Source file Reached by Covered by
[] []
/src/libarchive/libarchive/archive_read_add_passphrase.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_ar.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_check_magic.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_filter_bzip2.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_util.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_digest.c [] []
/src/libarchive/libarchive/archive_read_support_format_empty.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/filter_fork_posix.c [] []
/src/libarchive/libarchive/archive_read_support_filter_lrzip.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_cab.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_ppmd8.c [] []
/usr/local/bin/../include/c++/v1/stdexcept [] []
/src/libarchive/libarchive/archive_read_support_format_cpio.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_filter_lz4.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_acl.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_filter_uu.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_virtual.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_hmac.c [] []
/src/libarchive/libarchive/archive_read_support_format_lha.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_entry_xattr.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_raw.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_filter_all.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_entry.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_time.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_string.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_open_memory.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_endian.h ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_entry_link_resolver.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_filter_gzip.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_filter_program.c [] []
/src/libarchive/libarchive/archive_read_support_filter_xz.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_blake2s_ref.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_all.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/xxhash.c [] []
/src/libarchive/libarchive/archive_read_support_filter_lzop.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_blake2sp_ref.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_cryptor.c [] []
/src/libarchive/libarchive/archive_read_support_filter_compress.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_filter_rpm.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_zip.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive_fuzzer.cc ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_tar.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_rar5.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_string_sprintf.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_iso9660.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_rar.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_ppmd7.c [] []
/src/libarchive/libarchive/archive_options.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_warc.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_blake2_impl.h ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_7zip.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_filter_zstd.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_mtree.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_pack_dev.c ['libarchive_fuzzer'] []
/src/libarchive/libarchive/archive_cmdline.c [] []
/src/libarchive/libarchive/archive_rb.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_set_options.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_filter_grzip.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_entry_sparse.c ['libarchive_fuzzer'] ['libarchive_fuzzer']
/src/libarchive/libarchive/archive_read_support_format_xar.c ['libarchive_fuzzer'] ['libarchive_fuzzer']

Directories in report

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