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

Fuzzer details

Fuzzer: sanitize_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 599 51.5%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 562 48.4%
All colors 1161 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
69 61 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.__init__ call site: 00061 bleach._vendor.html5lib._inputstream.HTMLBinaryInputStream.__init__
55 872 bleach._vendor.html5lib.filters.base.Filter.__iter__ call site: 00872 bleach._vendor.html5lib.filters.inject_meta_charset.Filter.__iter__
53 1008 bleach.sanitizer.BleachSanitizerFilter.sanitize_characters call site: 01008 bleach._vendor.html5lib.filters.optionaltags.Filter.__iter__
43 1063 bleach.sanitizer.BleachSanitizerFilter.sanitize_stream call site: 01063 bleach._vendor.html5lib.filters.inject_meta_charset.Filter.__iter__
35 213 bleach.html5lib_shim.BleachHTMLTokenizer.consumeEntity call site: 00213 bleach._vendor.html5lib._tokenizer.HTMLTokenizer.consumeEntity
24 937 bleach.html5lib_shim.match_entity call site: 00937 bleach._vendor.html5lib.filters.inject_meta_charset.Filter.__iter__
19 252 bleach._vendor.html5lib._trie.py.Trie.has_keys_with_prefix call site: 00252 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.char
14 159 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.readChunk call site: 00159 bleach._vendor.html5lib._utils.isSurrogatePair
14 495 bleach._vendor.html5lib._tokenizer.HTMLTokenizer.__iter__ call site: 00495 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.charsUntil
13 46 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.__init__ call site: 00046 bleach._vendor.html5lib._inputstream.BufferedStream.seek
11 986 bleach.sanitizer.BleachSanitizerFilter.sanitize_uri_value call site: 00986 normalized_uri.split
10 403 bleach._vendor.html5lib._tokenizer.HTMLTokenizer.__iter__ call site: 00403 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.charsUntil

Runtime coverage analysis

Covered functions
287
Functions that are reachable but not covered
213
Reachable functions
317
Percentage of reachable functions covered
32.81%
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
...sanitize_fuzzer 3
bleach 2
bleach.sanitizer 52
bleach.html5lib_shim 33
bleach._vendor.html5lib.serializer 29
bleach._vendor.html5lib.html5parser 22
bleach._vendor.html5lib._tokenizer 99
bleach._vendor.html5lib._inputstream 62
bleach._vendor.html5lib._utils 2
bleach._vendor.html5lib._trie.py 3
bleach._vendor.html5lib._trie._base 2
bleach._vendor.html5lib.filters.whitespace 10
bleach._vendor.html5lib.filters.inject_meta_charset 15
bleach._vendor.html5lib.filters.base 1
bleach._vendor.html5lib.filters.optionaltags 5
bleach.linkifier 27
bleach._vendor.html5lib.filters.alphabeticalattributes 12
bleach._vendor.html5lib.filters.sanitizer 39

Fuzzer: linkify_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 608 52.8%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 542 47.1%
All colors 1150 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
64 992 bleach.sanitizer.BleachSanitizerFilter.sanitize_characters call site: 00992 bleach._vendor.html5lib.filters.inject_meta_charset.Filter.__iter__
54 856 bleach.sanitizer.BleachSanitizerFilter.merge_characters call site: 00856 bleach._vendor.html5lib.filters.whitespace.Filter.__iter__
52 789 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.__init__ call site: 00789 bleach._vendor.html5lib._inputstream.HTMLBinaryInputStream.__init__
37 1058 bleach.sanitizer.BleachSanitizerFilter.sanitize_stream call site: 01058 bleach._vendor.html5lib.filters.inject_meta_charset.Filter.__iter__
30 89 bleach.html5lib_shim.InputStreamWithMemory.unget call site: 00089 bleach._vendor.html5lib._tokenizer.HTMLTokenizer.consumeNumberEntity
19 123 bleach._vendor.html5lib._trie.py.Trie.has_keys_with_prefix call site: 00123 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.char
18 927 bleach._vendor.html5lib.filters.base.Filter.__iter__ call site: 00927 bleach._vendor.html5lib.filters.inject_meta_charset.Filter.__iter__
15 40 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.readChunk call site: 00040 bleach._vendor.html5lib._inputstream.BufferedStream.read
14 62 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.readChunk call site: 00062 bleach._vendor.html5lib._utils.isSurrogatePair
14 229 bleach._vendor.html5lib._tokenizer.HTMLTokenizer.__iter__ call site: 00229 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.charsUntil
13 772 bleach._vendor.html5lib._inputstream.HTMLUnicodeInputStream.__init__ call site: 00772 bleach._vendor.html5lib._inputstream.BufferedStream.seek
11 842 bleach._vendor.html5lib._tokenizer.HTMLTokenizer.__init__ call site: 00842 bleach._vendor.html5lib.html5parser.HTMLParser.mainLoop

Runtime coverage analysis

Covered functions
287
Functions that are reachable but not covered
214
Reachable functions
314
Percentage of reachable functions covered
31.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
...linkify_fuzzer 3
bleach 2
bleach.linkifier 35
bleach.html5lib_shim 33
bleach._vendor.html5lib.serializer 29
bleach._vendor.html5lib.html5parser 22
bleach._vendor.html5lib._tokenizer 99
bleach._vendor.html5lib._inputstream 62
bleach._vendor.html5lib._utils 2
bleach._vendor.html5lib._trie.py 3
bleach._vendor.html5lib._trie._base 2
bleach._vendor.html5lib.filters.optionaltags 5
bleach.sanitizer 40
bleach._vendor.html5lib.filters.alphabeticalattributes 12
bleach._vendor.html5lib.filters.whitespace 10
bleach._vendor.html5lib.filters.base 1
bleach._vendor.html5lib.filters.inject_meta_charset 15
bleach._vendor.html5lib.filters.sanitizer 39

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
bleach._vendor.parse.urljoin bleach._vendor.parse 3 ['N/A', 'N/A', 'N/A'] 5 0 4 12 8 36 0 126 114
bleach._vendor.html5lib.treewalkers.base.NonRecursiveTreeWalker.__iter__ bleach._vendor.html5lib.treewalkers.base 1 ['N/A'] 2 0 8 13 8 16 0 57 54
bleach._vendor.html5lib.treebuilders.etree_lxml.TreeBuilder.insertRoot bleach._vendor.html5lib.treebuilders.etree_lxml 2 ['N/A', 'N/A'] 2 0 5 7 6 18 0 60 54
bleach._vendor.parse.urlencode bleach._vendor.parse 6 ['N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A'] 4 0 6 9 7 19 0 69 54
bleach._vendor.html5lib.html5parser.getPhases.InBodyPhase.startTagA bleach._vendor.html5lib.html5parser 2 ['N/A', 'N/A'] 2 0 6 3 4 16 0 59 53
bleach._vendor.html5lib.treebuilders.etree_lxml.testSerializer.serializeElement bleach._vendor.html5lib.treebuilders.etree_lxml 2 ['N/A', 'N/A'] 2 0 15 12 8 15 2 58 46
bleach._vendor.html5lib._inputstream.EncodingParser.handleMeta bleach._vendor.html5lib._inputstream 1 ['N/A'] 3 0 0 10 7 18 0 70 45
bleach._vendor.html5lib._utils.moduleFactoryFactory.moduleFactory bleach._vendor.html5lib._utils 3 ['N/A', 'N/A', 'N/A'] 2 0 1 4 5 14 0 47 38
bleach._vendor.parse.parse_qsl bleach._vendor.parse 7 ['N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A'] 3 0 3 8 6 18 1 64 36

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

Functions statically reachable by fuzzers
28.9%
210 / 732
Cyclomatic complexity statically reachable by fuzzers
34.0%
893 / 2598

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

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
[] []
bleach.sanitizer ['sanitize_fuzzer', 'linkify_fuzzer'] []
bleach._vendor.html5lib.treewalkers.etree_lxml [] []
bleach._vendor.html5lib.treewalkers.etree [] []
bleach._vendor.html5lib.treewalkers.genshi [] []
itertools [] []
bleach._vendor.html5lib.treebuilders.etree [] []
bleach._vendor.html5lib.filters.lint [] []
bleach.css_sanitizer [] []
bleach._vendor.html5lib.filters.inject_meta_charset ['sanitize_fuzzer', 'linkify_fuzzer'] []
collections [] []
warnings [] []
unicodedata [] []
weakref [] []
webencodings [] []
bleach._vendor [] []
bleach._vendor.html5lib.treewalkers.dom [] []
bleach._vendor.html5lib.filters [] []
bleach._vendor.html5lib.constants [] []
bleach._vendor.html5lib.treewalkers.base [] []
bleach._vendor.parse [] []
types [] []
urllib [] []
bleach._vendor.html5lib._trie [] []
bleach._vendor.html5lib.filters.optionaltags ['sanitize_fuzzer', 'linkify_fuzzer'] []
bleach._vendor.html5lib._trie.py ['sanitize_fuzzer', 'linkify_fuzzer'] []
[] []
bleach._vendor.html5lib.serializer ['sanitize_fuzzer', 'linkify_fuzzer'] []
lxml [] []
bleach._vendor.html5lib.filters.base ['sanitize_fuzzer', 'linkify_fuzzer'] []
tinycss2 [] []
bleach._vendor.html5lib.treebuilders.etree_lxml [] []
bleach._vendor.html5lib._inputstream ['sanitize_fuzzer', 'linkify_fuzzer'] []
bleach._vendor.html5lib.treebuilders [] []
bleach._vendor.html5lib.treeadapters [] []
six [] []
bleach.callbacks [] []
bleach._vendor.html5lib.treeadapters.genshi [] []
bleach._vendor.html5lib._utils ['sanitize_fuzzer', 'linkify_fuzzer'] []
bleach._vendor.html5lib.html5parser ['sanitize_fuzzer', 'linkify_fuzzer'] []
...linkify_fuzzer ['linkify_fuzzer'] []
codecs [] []
xml [] []
bleach._vendor.html5lib.treeadapters.sax [] []
sys [] []
bleach._vendor.html5lib.filters.sanitizer ['sanitize_fuzzer', 'linkify_fuzzer'] []
bleach._vendor.html5lib.treebuilders.dom [] []
bleach.parse_shim [] []
bleach._vendor.html5lib._ihatexml [] []
copy [] []
bleach._vendor.html5lib [] []
atheris [] []
bleach.linkifier ['sanitize_fuzzer', 'linkify_fuzzer'] []
bleach._vendor.html5lib.treebuilders.base [] []
io [] []
re [] []
bleach ['sanitize_fuzzer', 'linkify_fuzzer'] []
bleach._vendor.html5lib._tokenizer ['sanitize_fuzzer', 'linkify_fuzzer'] []
...sanitize_fuzzer ['sanitize_fuzzer'] []
bisect [] []
bleach._vendor.html5lib.filters.whitespace ['sanitize_fuzzer', 'linkify_fuzzer'] []
bleach._vendor.html5lib._trie._base ['sanitize_fuzzer', 'linkify_fuzzer'] []
bleach._vendor.html5lib.treewalkers [] []
bleach._vendor.html5lib.filters.alphabeticalattributes ['sanitize_fuzzer', 'linkify_fuzzer'] []
bleach.html5lib_shim ['sanitize_fuzzer', 'linkify_fuzzer'] []
chardet [] []
genshi [] []

Directories in report

Directory