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

Fuzzer details

Fuzzer: fuzz_closest

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 360 47.7%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 394 52.2%
All colors 754 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
62 556 soupsieve.css_match.CSSMatch.match_selectors call site: 00556 soupsieve.css_match._DocumentNav.get_attribute_by_name
32 188 soupsieve.css_types.SelectorNth.__init__ call site: 00188 soupsieve.css_parser.CSSParser.parse_selectors
31 619 soupsieve.css_match.CSSMatch.match_selectors call site: 00619 soupsieve.css_match._DocumentNav.get_children
21 716 soupsieve.css_match._DocumentNav.get_contents call site: 00716 soupsieve.css_match.CSSMatch.match_dir
19 250 soupsieve.css_parser.CSSParser.parse_pseudo_nth call site: 00250 soupsieve.css_parser.CSSParser.parse_pseudo_lang
15 454 soupsieve.css_match._DocumentNav.get_next call site: 00454 soupsieve.css_match._DocumentNav.is_content_string
15 690 soupsieve.css_match.CSSMatch.match_selectors call site: 00690 soupsieve.css_match._DocumentNav.get_attribute_by_name
13 437 soupsieve.css_match._DocumentNav.is_special_string call site: 00437 soupsieve.css_match._DocumentNav.is_cdata
13 476 soupsieve.css_match.CSSMatch.match_selectors call site: 00476 soupsieve.css_match.CSSMatch.match_selectors
11 139 soupsieve.css_parser.CSSParser.parse_selectors call site: 00139 .print
9 29 bs4.builder.TreeBuilderRegistry.lookup call site: 00029 candidate_set.intersection
9 706 soupsieve.css_match.CSSMatch.match_selectors call site: 00706 soupsieve.css_match._DocumentNav.get_attribute_by_name

Runtime coverage analysis

Covered functions
244
Functions that are reachable but not covered
170
Reachable functions
270
Percentage of reachable functions covered
37.04%
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
/ 1
...fuzz_closest 7
bs4 37
bs4.builder 7
bs4.element 5
soupsieve 8
soupsieve.css_parser 80
soupsieve.util 3
soupsieve.css_match 139
soupsieve.css_types 2

Fuzzer: fuzz_filter

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 364 48.5%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 386 51.4%
All colors 750 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
62 558 soupsieve.css_match.CSSMatch.match_selectors call site: 00558 soupsieve.css_match._DocumentNav.get_attribute_by_name
32 188 soupsieve.css_types.SelectorNth.__init__ call site: 00188 soupsieve.css_parser.CSSParser.parse_selectors
31 621 soupsieve.css_match.CSSMatch.match_selectors call site: 00621 soupsieve.css_match._DocumentNav.get_children
30 708 soupsieve.css_match.CSSMatch.match_selectors call site: 00708 soupsieve.css_match.CSSMatch.match_dir
19 250 soupsieve.css_parser.CSSParser.parse_pseudo_nth call site: 00250 soupsieve.css_parser.CSSParser.parse_pseudo_lang
15 452 soupsieve.css_match._DocumentNav.get_next call site: 00452 soupsieve.css_match._DocumentNav.is_content_string
15 692 soupsieve.css_match.CSSMatch.match_selectors call site: 00692 soupsieve.css_match._DocumentNav.get_attribute_by_name
13 435 soupsieve.css_match._DocumentNav.is_special_string call site: 00435 soupsieve.css_match._DocumentNav.is_cdata
13 478 soupsieve.css_match.CSSMatch.match_selectors call site: 00478 soupsieve.css_match.CSSMatch.match_selectors
11 139 soupsieve.css_parser.CSSParser.parse_selectors call site: 00139 .print
9 28 bs4.builder.TreeBuilderRegistry.lookup call site: 00028 candidate_set.intersection
8 683 soupsieve.css_match.CSSMatch.match_selectors call site: 00683 soupsieve.css_match._DocumentNav.get_attribute_by_name

Runtime coverage analysis

Covered functions
244
Functions that are reachable but not covered
171
Reachable functions
267
Percentage of reachable functions covered
35.96%
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
/ 1
...fuzz_filter 5
bs4 37
bs4.builder 7
bs4.element 5
soupsieve 7
soupsieve.css_parser 80
soupsieve.util 3
soupsieve.css_match 137
soupsieve.css_types 2

Fuzzer: fuzz_select

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 360 48.3%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 385 51.6%
All colors 745 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
62 556 soupsieve.css_match.CSSMatch.match_selectors call site: 00556 soupsieve.css_match._DocumentNav.get_attribute_by_name
32 188 soupsieve.css_types.SelectorNth.__init__ call site: 00188 soupsieve.css_parser.CSSParser.parse_selectors
31 619 soupsieve.css_match.CSSMatch.match_selectors call site: 00619 soupsieve.css_match._DocumentNav.get_children
21 716 soupsieve.css_match._DocumentNav.get_contents call site: 00716 soupsieve.css_match.CSSMatch.match_dir
19 250 soupsieve.css_parser.CSSParser.parse_pseudo_nth call site: 00250 soupsieve.css_parser.CSSParser.parse_pseudo_lang
15 454 soupsieve.css_match._DocumentNav.get_next call site: 00454 soupsieve.css_match._DocumentNav.is_content_string
15 690 soupsieve.css_match.CSSMatch.match_selectors call site: 00690 soupsieve.css_match._DocumentNav.get_attribute_by_name
13 437 soupsieve.css_match._DocumentNav.is_special_string call site: 00437 soupsieve.css_match._DocumentNav.is_cdata
13 476 soupsieve.css_match.CSSMatch.match_selectors call site: 00476 soupsieve.css_match.CSSMatch.match_selectors
11 139 soupsieve.css_parser.CSSParser.parse_selectors call site: 00139 .print
9 29 bs4.builder.TreeBuilderRegistry.lookup call site: 00029 candidate_set.intersection
9 706 soupsieve.css_match.CSSMatch.match_selectors call site: 00706 soupsieve.css_match._DocumentNav.get_attribute_by_name

Runtime coverage analysis

Covered functions
244
Functions that are reachable but not covered
170
Reachable functions
265
Percentage of reachable functions covered
35.85%
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
/ 1
...fuzz_select 5
bs4 37
bs4.builder 7
bs4.element 5
soupsieve 6
soupsieve.css_parser 80
soupsieve.util 3
soupsieve.css_match 138
soupsieve.css_types 2

Fuzzer: fuzz_match

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 366 48.4%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 390 51.5%
All colors 756 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
62 560 soupsieve.css_match.CSSMatch.match_selectors call site: 00560 soupsieve.css_match._DocumentNav.get_attribute_by_name
32 192 soupsieve.css_types.SelectorNth.__init__ call site: 00192 soupsieve.css_parser.CSSParser.parse_selectors
31 623 soupsieve.css_match.CSSMatch.match_selectors call site: 00623 soupsieve.css_match._DocumentNav.get_children
21 720 soupsieve.css_match._DocumentNav.get_contents call site: 00720 soupsieve.css_match.CSSMatch.match_dir
19 254 soupsieve.css_parser.CSSParser.parse_pseudo_nth call site: 00254 soupsieve.css_parser.CSSParser.parse_pseudo_lang
15 458 soupsieve.css_match._DocumentNav.get_next call site: 00458 soupsieve.css_match._DocumentNav.is_content_string
15 694 soupsieve.css_match.CSSMatch.match_selectors call site: 00694 soupsieve.css_match._DocumentNav.get_attribute_by_name
13 441 soupsieve.css_match._DocumentNav.is_special_string call site: 00441 soupsieve.css_match._DocumentNav.is_cdata
13 480 soupsieve.css_match.CSSMatch.match_selectors call site: 00480 soupsieve.css_match.CSSMatch.match_selectors
11 143 soupsieve.css_parser.CSSParser.parse_selectors call site: 00143 .print
9 33 bs4.builder.TreeBuilderRegistry.lookup call site: 00033 candidate_set.intersection
9 710 soupsieve.css_match.CSSMatch.match_selectors call site: 00710 soupsieve.css_match._DocumentNav.get_attribute_by_name

Runtime coverage analysis

Covered functions
244
Functions that are reachable but not covered
173
Reachable functions
270
Percentage of reachable functions covered
35.93%
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
/ 1
...fuzz_match 8
bs4 37
bs4.builder 7
bs4.element 5
soupsieve 8
soupsieve.css_parser 80
soupsieve.util 3
soupsieve.css_match 138
soupsieve.css_types 2

Fuzz engine guidance

This sections provides heuristics that can be used as input to a fuzz engine when running a given fuzz target. The current focus is on providing input that is usable by libFuzzer.

/src/fuzz_closest.py

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['soupsieve.css_match.CSSMatch.match_selectors', 'soupsieve.css_types.SelectorNth.__init__', 'soupsieve.css_match._DocumentNav.get_contents', 'soupsieve.css_parser.CSSParser.parse_pseudo_nth', 'soupsieve.css_match._DocumentNav.get_next', 'soupsieve.css_match._DocumentNav.is_special_string', 'soupsieve.css_parser.CSSParser.parse_selectors']

/src/fuzz_filter.py

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['soupsieve.css_match.CSSMatch.match_selectors', 'soupsieve.css_types.SelectorNth.__init__', 'soupsieve.css_parser.CSSParser.parse_pseudo_nth', 'soupsieve.css_match._DocumentNav.get_next', 'soupsieve.css_match._DocumentNav.is_special_string', 'soupsieve.css_parser.CSSParser.parse_selectors']

/src/fuzz_select.py

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['soupsieve.css_match.CSSMatch.match_selectors', 'soupsieve.css_types.SelectorNth.__init__', 'soupsieve.css_match._DocumentNav.get_contents', 'soupsieve.css_parser.CSSParser.parse_pseudo_nth', 'soupsieve.css_match._DocumentNav.get_next', 'soupsieve.css_match._DocumentNav.is_special_string', 'soupsieve.css_parser.CSSParser.parse_selectors']

/src/fuzz_match.py

Dictionary

Use this with the libFuzzer -dict=DICT.file flag


Fuzzer function priority

Use one of these functions as input to libfuzzer with flag: -focus_function name

-focus_function=['soupsieve.css_match.CSSMatch.match_selectors', 'soupsieve.css_types.SelectorNth.__init__', 'soupsieve.css_match._DocumentNav.get_contents', 'soupsieve.css_parser.CSSParser.parse_pseudo_nth', 'soupsieve.css_match._DocumentNav.get_next', 'soupsieve.css_match._DocumentNav.is_special_string', 'soupsieve.css_parser.CSSParser.parse_selectors']

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
[] []
bs4.builder._htmlparser [] []
functools [] []
codecs [] []
soupsieve ['fuzz_closest', 'fuzz_filter', 'fuzz_select', 'fuzz_match'] []
datetime [] []
bs4.diagnose [] []
sys [] []
html5lib [] []
soupsieve.css_parser ['fuzz_closest', 'fuzz_filter', 'fuzz_select', 'fuzz_match'] []
soupsieve.__meta__ [] []
bs4.element ['fuzz_closest', 'fuzz_filter', 'fuzz_select', 'fuzz_match'] []
...fuzz_filter ['fuzz_filter'] []
bs4 ['fuzz_closest', 'fuzz_filter', 'fuzz_select', 'fuzz_match'] []
tempfile [] []
random [] []
chardet [] []
cProfile [] []
soupsieve.util ['fuzz_closest', 'fuzz_filter', 'fuzz_select', 'fuzz_match'] []
soupsieve.css_match ['fuzz_closest', 'fuzz_filter', 'fuzz_select', 'fuzz_match'] []
bs4.formatter [] []
io [] []
time [] []
...fuzz_match ['fuzz_match'] []
...fuzz_closest ['fuzz_closest'] []
bs4.builder._lxml [] []
cchardet [] []
[] []
collections [] []
unicodedata [] []
charset_normalizer [] []
logging [] []
re [] []
atheris [] []
lxml [] []
html [] []
traceback [] []
soupsieve.css_types ['fuzz_closest', 'fuzz_filter', 'fuzz_select', 'fuzz_match'] []
bs4.builder._html5lib [] []
pstats [] []
bs4.dammit [] []
...fuzz_select ['fuzz_select'] []
warnings [] []
copyreg [] []
typing [] []
bs4.builder ['fuzz_closest', 'fuzz_filter', 'fuzz_select', 'fuzz_match'] []
bs4.css [] []
soupsieve.pretty [] []

Directories in report

Directory