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

Fuzzer details

Fuzzer: fuzz_parser

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 31 46.9%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 35 53.0%
All colors 66 100

Fuzz blockers

The following nodes represent call sites where fuzz blockers occur.

Amount of callsites blocked Calltree index Parent function Callsite Largest blocked function
20 11 opt_einsum.parser.possibly_convert_to_numpy call site: 00011 opt_einsum.parser.convert_interleaved_input
3 1 ...fuzz_parser.TestOneInput call site: 00001 fdp.ConsumeFloat
3 45 opt_einsum.parser.parse_einsum_input call site: 00045 .len
2 7 opt_einsum.parser.parse_einsum_input call site: 00007 .hasattr
1 38 opt_einsum.parser.parse_einsum_input call site: 00038 opt_einsum.parser.get_symbol
1 49 opt_einsum.parser.parse_einsum_input call site: 00049 sub.replace
1 64 opt_einsum.parser.parse_einsum_input call site: 00064 fdp.ConsumeBool

Runtime coverage analysis

Covered functions
471
Functions that are reachable but not covered
32
Reachable functions
36
Percentage of reachable functions covered
11.11%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
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
/ 1
...fuzz_parser 4
opt_einsum.parser 31

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
numpy.f2py.f2py2e.run_main numpy.f2py.f2py2e 1 ['N/A'] 4 0 9 8 6 235 2 900 882
numpy.distutils.command.build_clib.build_clib.run numpy.distutils.command.build_clib 1 ['N/A'] 5 0 15 8 6 204 0 687 624
numpy.f2py.crackfortran.postcrack numpy.f2py.crackfortran 3 ['N/A', 'N/A', 'N/A'] 5 0 9 20 11 189 4 714 572
numpy.lib.shape_base.apply_along_axis numpy.lib.shape_base 5 ['N/A', 'N/A', 'N/A', 'N/A', 'N/A'] 5 0 1 2 4 164 0 553 511
numpy.linalg.setup.configuration numpy.linalg.setup 2 ['N/A', 'N/A'] 4 0 4 2 4 172 0 576 443
numpy.distutils.command.build_src.build_src.build_sources numpy.distutils.command.build_src 1 ['N/A'] 4 0 6 2 4 167 1 557 407
numpy.f2py.crackfortran.readfortrancode numpy.f2py.crackfortran 3 ['N/A', 'N/A', 'N/A'] 3 0 14 42 20 178 3 701 333

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

Functions statically reachable by fuzzers
10.0%
389 / 3949
Cyclomatic complexity statically reachable by fuzzers
13.0%
1835 / 14374

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

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
numpy._pytesttester.PytestTester.__call__ 39 0 0.0% []
numpy.core.numeric.tensordot 54 0 0.0% []
numpy.core.numeric.cross 61 1 1.639% []
numpy.matrixlib.defmatrix.matrix.__new__ 35 0 0.0% []
numpy.core.function_base.linspace 37 0 0.0% []
numpy.core.function_base.geomspace 33 0 0.0% []
numpy.lib.polynomial.polyfit 48 0 0.0% []
numpy.lib.polynomial.poly1d.__str__.fmt_float 35 0 0.0% []
numpy.ctypeslib.ndpointer 45 0 0.0% []
numpy.core._internal._array_descr 34 0 0.0% []
numpy.core._internal._commastring 33 0 0.0% []
numpy.core._internal.__dtype_from_pep3118 78 0 0.0% []
opt_einsum.paths.BranchBound.__call__._branch_iterate._assess_candidate 50 0 0.0% []
opt_einsum.paths.ssa_greedy_optimize 64 0 0.0% []
opt_einsum.paths.DynamicProgramming.__call__ 52 0 0.0% []
numpy.ma.core.MaskedArray.__new__ 51 16 31.37% []
numpy.ma.core.MaskedArray.__getitem__._scalar_heuristic 41 0 0.0% []
numpy.ma.core.MaskedArray.__setitem__ 50 3 6.0% []
numpy.ma.core.MaskedArray.__setmask__ 37 3 8.108% []
numpy.ma.core.MaskedArray.__repr__ 33 0 0.0% []
numpy.ma.core.MaskedArray.var 35 1 2.857% []
numpy.lib.arraypad._set_reflect_both 35 0 0.0% []
numpy.lib.arraypad.pad 74 0 0.0% []
numpy.core.einsumfunc._greedy_path 34 0 0.0% []
numpy.core.einsumfunc._can_dot 31 0 0.0% []
numpy.core.einsumfunc._parse_einsum_input 103 0 0.0% []
numpy.core.einsumfunc.einsum_path 107 0 0.0% []
numpy.core.einsumfunc.einsum 42 0 0.0% []
numpy.lib.npyio._read 98 1 1.020% []
numpy.lib.npyio.savetxt.WriteWrap.first_write 67 0 0.0% []
numpy.lib.npyio.genfromtxt 169 0 0.0% []
numpy.lib.npyio.genfromtxt.tobytes_first 77 0 0.0% []
numpy.lib.npyio.genfromtxt.encode_unicode_cols 79 1 1.265% []
numpy.core.memmap.memmap.__new__ 52 0 0.0% []
numpy.lib.utils.who 41 0 0.0% []
numpy.lib.utils.info 69 0 0.0% []
numpy.lib.utils._lookfor_generate_cache 89 0 0.0% []
numpy.linalg.linalg.matrix_power 32 0 0.0% []
numpy.linalg.linalg.qr 47 0 0.0% []
numpy.linalg.linalg.svd 41 0 0.0% []
numpy.linalg.linalg.lstsq 38 0 0.0% []
numpy.linalg.linalg.norm 82 0 0.0% []
numpy.core.defchararray.array 40 0 0.0% []
numpy.core.arrayprint._formatArray.recurser 58 0 0.0% []
numpy.core.arrayprint.FloatingFormat.fillFormat 56 0 0.0% []
numpy.core._methods._var 33 0 0.0% []
numpy.lib.nanfunctions.nanvar 34 0 0.0% []
numpy.lib.function_base.select 31 0 0.0% []
numpy.lib.function_base.gradient 113 0 0.0% []
numpy.lib.function_base.diff 37 0 0.0% []
numpy.lib.function_base.cov 69 0 0.0% []
numpy.lib.function_base._ureduce 33 0 0.0% []
numpy.lib.function_base._median 31 0 0.0% []
numpy.lib.function_base._quantile 34 0 0.0% []
numpy.lib.function_base.delete 89 0 0.0% []
numpy.lib.function_base.insert 67 0 0.0% []
numpy.lib.index_tricks.nd_grid.__getitem__ 55 2 3.636% []
numpy.lib.index_tricks.AxisConcatenator.__getitem__ 82 0 0.0% []
numpy.ma.extras.apply_along_axis 69 1 1.449% []
numpy.ma.extras.average 31 0 0.0% []
numpy.ma.extras._median 36 0 0.0% []
numpy.ma.extras.corrcoef 31 3 9.677% []
numpy.lib.histograms._get_bin_edges 40 0 0.0% []
numpy.lib.histograms.histogram 54 0 0.0% []
numpy.lib.histograms.histogramdd 57 0 0.0% []
numpy.lib.format._read_array_header 37 0 0.0% []
numpy.lib.format.read_array 32 0 0.0% []
numpy.polynomial.chebyshev._zseries_div 31 0 0.0% []
numpy.polynomial.chebyshev.chebint 37 0 0.0% []
numpy.lib._iotools.NameValidator.validate 38 0 0.0% []
numpy.lib._iotools.StringConverter.__init__ 46 0 0.0% []
numpy.core._machar.MachAr._do_init 178 0 0.0% []
numpy.core.records.fromfile 33 0 0.0% []
numpy.core.records.array 41 0 0.0% []
numpy.lib.arraysetops.in1d 69 0 0.0% []
numpy.polynomial.hermite_e.hermeint 34 0 0.0% []
numpy.polynomial.polyutils._fit 53 0 0.0% []
numpy.polynomial.polynomial.polyint 35 0 0.0% []
numpy.polynomial._polybase.ABCPolyBase._repr_latex_ 33 0 0.0% []
numpy.polynomial.hermite.hermint 34 0 0.0% []
numpy.polynomial.legendre.legint 38 0 0.0% []
numpy.polynomial.laguerre.lagint 35 0 0.0% []
opt_einsum.contract.contract_path 77 0 0.0% []
opt_einsum.contract._core_contract 36 0 0.0% []
opt_einsum.blas.can_blas 34 0 0.0% []
opt_einsum.blas.tensor_blas 39 0 0.0% []
opt_einsum.backends.torch.tensordot 31 0 0.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
[] []
opt_einsum.backends.cupy [] []
numpy.core.umath_tests [] []
numpy.matrixlib.defmatrix [] []
numpy.f2py.func2subr [] []
numpy.distutils.armccompiler [] []
weakref [] []
numpy.lib.npyio [] []
numpy._typing._add_docstring [] []
numpy.lib.arraysetops [] []
builtins [] []
numpy.fft._pocketfft [] []
numpy.matrixlib.setup [] []
numpy.lib.recfunctions [] []
fileinput [] []
opt_einsum.backends.dispatch [] []
opt_einsum._version [] []
numpy.ma.bench [] []
numpy.lib.scimath [] []
numpy.ma.setup [] []
opt_einsum.parser ['fuzz_parser'] []
numpy.distutils.command.build_py [] []
numpy.ma.core [] []
numpy.distutils.command.bdist_rpm [] []
numpy._typing [] []
locale [] []
opt_einsum.backends.object_arrays [] []
numpy.distutils.unixccompiler [] []
numpy.core._add_newdocs_scalars [] []
numpy.testing.setup [] []
numpy._typing._extended_precision [] []
numpy.f2py.cb_rules [] []
numpy.array_api._creation_functions [] []
numpy.linalg.linalg [] []
numpy.distutils.fcompiler.fujitsu [] []
numpy.distutils.command.config_compiler [] []
numpy.distutils.ccompiler [] []
numpy.distutils.msvc9compiler [] []
numpy.f2py.f2py2e [] []
collections [] []
numpy.distutils.msvccompiler [] []
numpy.lib.shape_base [] []
tensorflow [] []
opt_einsum.sharing [] []
numpy.testing.print_coercion_tables [] []
numpy.core._dtype [] []
numpy.compat [] []
opt_einsum.backends.jax [] []
numpy.lib.utils [] []
numpy.matlib [] []
numpy.core.function_base [] []
numpy.array_api._constants [] []
numpy.typing.mypy_plugin [] []
copy [] []
numpy.distutils.fcompiler.none [] []
ctypes [] []
numpy.__config__ [] []
numpy.distutils.pathccompiler [] []
numpy.f2py.diagnose [] []
numpy.setup [] []
numpy.distutils.core [] []
_mt19937 [] []
Cython [] []
numba [] []
numpy.f2py.cfuncs [] []
numpy._pyinstaller.test_pyinstaller [] []
numpy.core.shape_base [] []
tempfile [] []
numpy._typing._generic_alias [] []
curses [] []
numpy._typing.setup [] []
ast [] []
numpy.lib.polynomial [] []
numpy.random [] []
numpy.distutils.line_endings [] []
numpy.array_api._set_functions [] []
numpy.distutils.fcompiler.compaq [] []
numpy.distutils.command [] []
PyInstaller [] []
pydoc [] []
base64 [] []
_pcg64 [] []
numpy.core._machar [] []
mmap [] []
numpy.lib.ufunclike [] []
hypothesis [] []
numpy.testing._private.nosetester [] []
numpy.compat.py3k [] []
numpy.distutils.__config__ [] []
functools [] []
charset_normalizer [] []
numpy.f2py.__version__ [] []
numpy.matrixlib [] []
numpy.testing [] []
subprocess [] []
numpy.distutils.fcompiler.nv [] []
numpy._typing._char_codes [] []
numpy.distutils [] []
numpy.lib.mixins [] []
numpy.doc.ufuncs [] []
numpy.distutils.command.egg_info [] []
numpy.random.setup [] []
opt_einsum.backends [] []
numpy.polynomial.hermite [] []
numpy.core.numeric [] []
numpy.typing.setup [] []
numpy.distutils.fcompiler.gnu [] []
zipfile [] []
numpy.distutils.command.config [] []
numpy._typing._nbit [] []
numpy.random._examples.numba.extending [] []
pytest [] []
_dummy_thread [] []
pipes [] []
mypy [] []
doctest [] []
numpy.f2py.rules [] []
numpy._typing._scalars [] []
numpy.testing._private.extbuild [] []
numpy.polynomial.chebyshev [] []
numpy.lib.type_check [] []
numpy.distutils.fcompiler.environment [] []
hashlib [] []
decimal [] []
numpy.distutils.misc_util [] []
numpy.distutils.command.build_clib [] []
numpy.ma.timer_comparison [] []
numpy.core._exceptions [] []
numpy.lib.index_tricks [] []
opt_einsum.blas [] []
numpy.lib.histograms [] []
numpy.array_api._utility_functions [] []
abc [] []
json [] []
typing [] []
numpy.core._ufunc_config [] []
numpy.lib.twodim_base [] []
numpy.distutils.fcompiler.mips [] []
numpy.distutils.exec_command [] []
opt_einsum.typing [] []
numpy.distutils.setup [] []
numpy.distutils.fcompiler.intel [] []
numpy._globals [] []
numpy.lib.setup [] []
numpy.core._internal [] []
numpy.linalg.setup [] []
numpy.random._examples.numba.extending_distributions [] []
numpy.distutils.fcompiler [] []
numpy.array_api._array_object [] []
numpy.array_api._typing [] []
numpy.array_api._elementwise_functions [] []
numpy.doc.constants [] []
numpy.distutils._shell_utils [] []
numpy._version [] []
numpy.polynomial [] []
opt_einsum.backends.torch [] []
numpy.array_api._data_type_functions [] []
numpy.core._asarray [] []
numpy.random._examples.cffi.parse [] []
types [] []
numpy.lib.arraypad [] []
configparser [] []
numpy.array_api._statistical_functions [] []
inspect [] []
numpy.testing._private.utils [] []
numpy.core.memmap [] []
gc [] []
math [] []
numpy.f2py.__main__ [] []
numpy.conftest [] []
numpy.f2py.capi_maps [] []
contextvars [] []
numpy.f2py.setup [] []
numpy._typing._nested_sequence [] []
numpy.distutils.cpuinfo [] []
numpy._pyinstaller.pyinstaller-smoke [] []
pickle [] []
sysconfig [] []
numpy.distutils.system_info [] []
tokenize [] []
numpy.f2py.auxfuncs [] []
numpy.distutils.log [] []
traceback [] []
numpy.core.fromnumeric [] []
operator [] []
theano [] []
numpy.lib.format [] []
numpy.core.defchararray [] []
numpy.distutils.fcompiler.nag [] []
numpy.lib.nanfunctions [] []
numpy.array_api._searching_functions [] []
numpy.distutils.fcompiler.vast [] []
cupy [] []
numpy.distutils.fcompiler.g95 [] []
mtrand [] []
numpy.distutils.command.install_clib [] []
urllib [] []
platform [] []
glob [] []
unittest [] []
numpy.core.arrayprint [] []
numpy.distutils.fcompiler.absoft [] []
numpy.distutils.command.build_src [] []
random [] []
numpy.core._type_aliases [] []
numpy.lib._iotools [] []
numpy.distutils.command.build [] []
numpy.core.setup [] []
numpy.testing._private [] []
numpy.distutils.fcompiler.pg [] []
numpy.core [] []
numpy.array_api [] []
importlib [] []
numpy.version [] []
winreg [] []
numpy.distutils.conv_template [] []
numpy.distutils.command.develop [] []
concurrent [] []
numpy.f2py.f90mod_rules [] []
numpy.lib.function_base [] []
numpy.core.generate_numpy_api [] []
contextlib [] []
atheris [] []
[] []
textwrap [] []
numpy.f2py.symbolic [] []
code_generators [] []
numpy.core.records [] []
opt_einsum.paths [] []
numpy.polynomial.polyutils [] []
numpy.distutils.fcompiler.sun [] []
threading [] []
numpy.polynomial.hermite_e [] []
re [] []
copyreg [] []
numpy.compat._pep440 [] []
numpy.compat._inspect [] []
numpy.distutils.npy_pkg_config [] []
_generator [] []
numpy.array_api._sorting_functions [] []
numpy.fft.setup [] []
numpy.distutils.fcompiler.arm [] []
numpy.distutils.lib2def [] []
opt_einsum.helpers [] []
numpy.distutils.fcompiler.hpux [] []
numpy.core.numerictypes [] []
numpy.distutils.fcompiler.lahey [] []
numpy.f2py.crackfortran [] []
numpy._pytesttester [] []
numpy.typing [] []
numpy.testing.utils [] []
numpy.core.cversions [] []
genapi [] []
numpy.core._string_helpers [] []
numpy.ma [] []
numpy.distutils.numpy_distribution [] []
numpy.core.multiarray [] []
numpy._pyinstaller [] []
numpy.doc [] []
numpy.core.einsumfunc [] []
os [] []
shutil [] []
numpy.lib [] []
numpy.dual [] []
opt_einsum.backends.tensorflow [] []
numpy.lib.stride_tricks [] []
_pocketfft_internal [] []
numpy.distutils.command.autodist [] []
numpy.distutils.command.install [] []
numpy.distutils.extension [] []
atexit [] []
numpy.ma.extras [] []
opt_einsum [] []
numpy.lib.user_array [] []
numpy.testing._private.noseclasses [] []
numpy.linalg [] []
numpy.polynomial._polybase [] []
_thread [] []
heapq [] []
numpy._typing._array_like [] []
numpy._typing._shape [] []
psutil [] []
numpy.compat.setup [] []
numpy.core.overrides [] []
sys [] []
numpy.f2py [] []
numpy.core._add_newdocs [] []
numpy.core.getlimits [] []
numpy.f2py.common_rules [] []
...fuzz_parser ['fuzz_parser'] []
numpy.fft.helper [] []
numpy.array_api.linalg [] []
itertools [] []
numpy.lib.arrayterator [] []
numpy._distributor_init [] []
numpy.distutils.fcompiler.ibm [] []
pickle5 [] []
numpy [] []
opt_einsum.contract [] []
optparse [] []
threadpoolctl [] []
numpy.f2py.use_rules [] []
numpy.distutils.from_template [] []
cffi [] []
numbers [] []
numpy.array_api._dtypes [] []
numpy.core.setup_common [] []
numpy.lib._datasource [] []
numpy.ctypeslib [] []
numpy.polynomial.laguerre [] []
numpy.ma.testutils [] []
nose [] []
pprint [] []
win32pdh [] []
numpy.distutils.mingw32ccompiler [] []
struct [] []
numpy.core._dtype_ctypes [] []
numpy.testing._private.decorators [] []
numpy.polynomial.polynomial [] []
warnings [] []
opt_einsum.path_random [] []
torch [] []
_multiarray_umath [] []
numpy.core.umath [] []
numpy.distutils.ccompiler_opt [] []
opt_einsum.backends.theano [] []
distutils [] []
numpy.testing._private.parameterized [] []
numpy.lib._version [] []
numpy.distutils.command.sdist [] []
numpy.random._examples.cython.setup [] []
numpy.distutils.intelccompiler [] []
pathlib [] []
numpy.distutils.command.build_scripts [] []
shlex [] []
numpy._typing._dtype_like [] []
numpy.random._pickle [] []
numpy.distutils.command.build_ext [] []
numpy.polynomial.setup [] []
numpy.fft [] []
time [] []
numpy.array_api._manipulation_functions [] []
multiprocessing [] []
numpy.ma.mrecords [] []
numpy.random._examples.cffi.extending [] []
io [] []
numpy.polynomial.legendre [] []
numpy_distutils [] []
numpy._pyinstaller.hook-numpy [] []
numpy.core._methods [] []
difflib [] []
numpy.distutils.command.install_headers [] []
setuptools [] []
timeit [] []
numpy.array_api.setup [] []
numpy.distutils.command.install_data [] []
numpy.distutils.fcompiler.pathf95 [] []

Directories in report

Directory