Fuzz introspector

Project overview

High level conclusions

Fuzzers reach 26.97% of all functions. Improvements should be made
Fuzzers reach 49.88% of cyclomatic complexity. Improvements could be made
Fuzzer dav1d_fuzzer_mt is blocked: runtime coverage only covers 0.0% of its reachable functions.
Fuzzer dav1d_fuzzer is blocked: runtime coverage only covers 0.0% of its reachable functions.

Reachability and coverage overview

Functions statically reachable by fuzzers
26.97%
571/2117
Cyclomatic complexity statically reachable by fuzzers
49.89%
4062/8142
Functions covered at runtime
0

Fuzzers overview

Fuzzer Fuzzer filename Functions Reached Functions unreached Fuzzer depth Files reached Basic blocks reached Cyclomatic complexity Details
dav1d_fuzzer tests/libfuzzer/dav1d_fuzzer.c 571 1546 14 47 9984 4062 dav1d_fuzzer.c
dav1d_fuzzer_mt tests/libfuzzer/dav1d_fuzzer.c 571 1546 14 47 9984 4062 dav1d_fuzzer.c

Fuzzer details

Fuzzer: dav1d_fuzzer

Call tree overview

The following is the call tree with color coding for which functions are hit/not hit. This info is based on the coverage achieved of all fuzzers together and not just this specific fuzzer. This should change in the future to be per-fuzzer-basis.

For further technical details on what the call tree overview is, please see the Glossary .

Full calltree

The following link provides a visualisation of the full calltree overlayed with coverage information: full calltree

For futher technical details on how the call tree is made, please see the Glossary .

Fuzz blockers

The followings nodes represent call sites where fuzz blockers occur

Amount of callsites blocked Calltree index Parent function Callsite Largest blocked function
2219 0 EP call site dav1d_parse_sequence_header

Functions hit (dynamic analysis based)

Covered functions
0
Functions that are reachable but not covered
571
Reachable functions
571
Percentage of reachable functions covered
0.0%
NB: The sum of covered functions and functions that are reachable but not covered need not be 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 our of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files hit

filename functions hit
tests/libfuzzer/dav1d_fuzzer.c 2
src/lib.c 22
src/picture.c 13
src/mem.c 5
/ 189
src/mem.h 4
src/cpu.c 3
src/x86/cpu.c 1
src/wedge.c 10
include/common/intops.h 10
src/qm.c 4
src/data.c 7
src/refmvs.c 16
src/thread_task.c 14
src/thread.h 1
src/fg_apply_tmpl.c 7
include/common/bitdepth.h 1
src/decode.c 34
src/lf_mask.c 9
src/env.h 23
src/ref.c 8
src/cdf.c 7
src/msac.c 5
include/common/attributes.h 3
src/x86/msac_init.c 1
src/warpmv.c 8
src/msac.h 2
src/x86/refmvs_init.c 1
src/intra_edge.c 3
src/obu.c 7
src/getbits.c 9
src/getbits.h 1
src/cdef_tmpl.c 10
src/x86/cdef_init_tmpl.c 1
src/ipred_tmpl.c 34
src/x86/ipred_init_tmpl.c 1
src/itx_tmpl.c 23
src/itx_1d.c 10
src/x86/itx_init_tmpl.c 1
src/loopfilter_tmpl.c 7
src/x86/loopfilter_init_tmpl.c 1
src/looprestoration_tmpl.c 10
src/x86/looprestoration_init_tmpl.c 1
src/mc_tmpl.c 28
src/x86/mc_init_tmpl.c 1
src/filmgrain_tmpl.c 15
src/x86/filmgrain_init_tmpl.c 1

Fuzzer: dav1d_fuzzer_mt

Call tree overview

The following is the call tree with color coding for which functions are hit/not hit. This info is based on the coverage achieved of all fuzzers together and not just this specific fuzzer. This should change in the future to be per-fuzzer-basis.

For further technical details on what the call tree overview is, please see the Glossary .

Full calltree

The following link provides a visualisation of the full calltree overlayed with coverage information: full calltree

For futher technical details on how the call tree is made, please see the Glossary .

Fuzz blockers

The followings nodes represent call sites where fuzz blockers occur

Amount of callsites blocked Calltree index Parent function Callsite Largest blocked function
2219 0 EP call site dav1d_parse_sequence_header

Functions hit (dynamic analysis based)

Covered functions
0
Functions that are reachable but not covered
571
Reachable functions
571
Percentage of reachable functions covered
0.0%
NB: The sum of covered functions and functions that are reachable but not covered need not be 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 our of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files hit

filename functions hit
tests/libfuzzer/dav1d_fuzzer.c 2
src/lib.c 22
src/picture.c 13
src/mem.c 5
/ 189
src/mem.h 4
src/cpu.c 3
src/x86/cpu.c 1
src/wedge.c 10
include/common/intops.h 10
src/qm.c 4
src/data.c 7
src/refmvs.c 16
src/thread_task.c 14
src/thread.h 1
src/fg_apply_tmpl.c 7
include/common/bitdepth.h 1
src/decode.c 34
src/lf_mask.c 9
src/env.h 23
src/ref.c 8
src/cdf.c 7
src/msac.c 5
include/common/attributes.h 3
src/x86/msac_init.c 1
src/warpmv.c 8
src/msac.h 2
src/x86/refmvs_init.c 1
src/intra_edge.c 3
src/obu.c 7
src/getbits.c 9
src/getbits.h 1
src/cdef_tmpl.c 10
src/x86/cdef_init_tmpl.c 1
src/ipred_tmpl.c 34
src/x86/ipred_init_tmpl.c 1
src/itx_tmpl.c 23
src/itx_1d.c 10
src/x86/itx_init_tmpl.c 1
src/loopfilter_tmpl.c 7
src/x86/loopfilter_init_tmpl.c 1
src/looprestoration_tmpl.c 10
src/x86/looprestoration_init_tmpl.c 1
src/mc_tmpl.c 28
src/x86/mc_init_tmpl.c 1
src/filmgrain_tmpl.c 15
src/x86/filmgrain_init_tmpl.c 1

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 reaches a high amount of 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
dav1d_recon_b_inter_16bpc /work/build/../../src/dav1d/src/recon_tmpl.c 3 ['struct.Dav1dTaskContext.1027 *', 'int ', 'struct.Av1Block *'] 8 0 2363 293 75 26 0 363 334
dav1d_mc_dsp_init_x86_16bpc /work/build/../../src/dav1d/src/x86/mc_init_tmpl.c 1 ['struct.Dav1dMCDSPContext.910 *'] 1 0 247 14 7 139 1 285 283
dav1d_filter_sbrow_8bpc /work/build/../../src/dav1d/src/recon_tmpl.c 2 ['struct.Dav1dFrameContext.830 *', 'int '] 5 0 65 12 5 25 0 221 213
dav1d_filter_sbrow_16bpc /work/build/../../src/dav1d/src/recon_tmpl.c 2 ['struct.Dav1dFrameContext.1002 *', 'int '] 5 0 65 12 5 26 0 223 134
dav1d_recon_b_inter_8bpc /work/build/../../src/dav1d/src/recon_tmpl.c 3 ['struct.Dav1dTaskContext.855 *', 'int ', 'struct.Av1Block *'] 8 0 2315 293 75 23 0 356 116
dav1d_itx_dsp_init_x86_16bpc /work/build/../../src/dav1d/src/x86/itx_init_tmpl.c 2 ['struct.Dav1dInvTxfmDSPContext.904 *', 'int '] 1 0 833 17 8 52 1 112 110
dav1d_intra_pred_dsp_init_x86_16bpc /work/build/../../src/dav1d/src/x86/ipred_init_tmpl.c 1 ['struct.Dav1dIntraPredDSPContext.903 *'] 1 0 109 10 5 48 1 101 99

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

Functions statically reachable by fuzzers
40.58%
859/2117
Cyclomatic complexity statically reachable by fuzzers
65.72%
5351 / 8142

All functions overview

The status of all functions in the project will be as follows if you implement fuzzers for these functions

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