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: inchi_input_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 2756 44.1%
gold [1:9] 370 5.92%
yellow [10:29] 278 4.45%
greenyellow [30:49] 186 2.98%
lawngreen 50+ 2650 42.4%
All colors 6240 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
311 5666 OutputINChI1 call site: 05666 OutputINChI1
234 4321 ExtractConnectedComponent call site: 04321 mark_arom_bonds
88 4559 DisconnectInpAtBond call site: 04559 TreatErrorsInReadTheStructure
86 886 ReadInChICoord call site: 00886 ParseAuxSegmentNumbers
82 196 set_common_options_by_parg call site: 00196 inchi_ios_eprint
81 5294 OutputINChI1 call site: 05294 OutputINCHI_StereoLayer_EnhancedStereo
62 70 inchi_ios_print_nodisplay call site: 00070 inchi_ios_print_nodisplay
60 3254 RestoreNNNgroup call site: 03254 RunBnsTestOnce
60 4938 needed_unusual_el_valence call site: 04938 OrigAtData_WriteToSDfileAdditionalLines
57 2078 GetStereocenter0DParity call site: 02078 Get2DTetrahedralAmbiguity
55 4648 DoOneStructureEarlyPreprocessing call site: 04648 CreateOneStructureINChI
52 307 ReadCommandLineParms call site: 00307 inchi_ios_eprint

Runtime coverage analysis

Covered functions
763
Functions that are reachable but not covered
272
Reachable functions
1034
Percentage of reachable functions covered
73.69%
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/inchi_input_fuzzer.c 1
INCHI_BASE/src/ikey_dll.c 1
INCHI_BASE/src/util.c 32
INCHI_BASE/src/sha2.c 5
INCHI_BASE/src/ikey_base26.c 8
INCHI_API/libinchi/src/inchi_dll.c 10
INCHI_BASE/src/ichi_io.c 16
INCHI_BASE/src/ichiparm.c 4
INCHI_BASE/src/ichiread.c 65
INCHI_BASE/src/ichiprt2.c 32
INCHI_BASE/src/ichicano.c 16
INCHI_BASE/src/mol_fmt4.c 11
INCHI_BASE/src/runichi3.c 33
INCHI_BASE/src/strutil.c 58
INCHI_BASE/src/ichirvr7.c 17
INCHI_BASE/src/mol2atom.c 7
INCHI_BASE/src/ichimake.c 25
INCHI_BASE/src/ichirvr4.c 20
INCHI_BASE/src/ichirvr2.c 29
INCHI_BASE/src/ichirvr1.c 51
INCHI_BASE/src/ichister.c 43
INCHI_BASE/src/ichitaut.c 39
INCHI_BASE/src/ichisort.c 29
INCHI_BASE/src/ichinorm.c 63
INCHI_BASE/src/ichi_bns.c 100
INCHI_BASE/src/ichican2.c 58
INCHI_BASE/src/ichiqueu.c 16
INCHI_BASE/src/ichiring.c 11
INCHI_BASE/src/ichiisot.c 2
INCHI_BASE/src/ichimap2.c 30
INCHI_BASE/src/ichicans.c 27
INCHI_BASE/src/ichimap1.c 27
INCHI_BASE/src/ichimap4.c 2
INCHI_BASE/src/ichimak2.c 11
INCHI_BASE/src/ichierr.c 3
INCHI_BASE/src/ichirvr5.c 3
INCHI_BASE/src/ichiprt1.c 37
INCHI_BASE/src/ichirvr3.c 3
INCHI_BASE/src/ichirvr6.c 1
INCHI_BASE/src/runichi.c 9
INCHI_BASE/src/runichi2.c 3
INCHI_BASE/src/mol_fmt2.c 1
INCHI_BASE/src/runichi4.c 9
INCHI_API/libinchi/src/inchi_dll_a2.c 2
INCHI_BASE/src/ichiprt3.c 26

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
GetOneStructure /src/inchi/INCHI-1-SRC/INCHI_BASE/src/runichi2.c 11 ['N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A'] 11 0 681 113 38 159 0 2460 1858
GetINCHI /src/inchi/INCHI-1-SRC/INCHI_API/libinchi/src/inchi_dll.c 2 ['N/A', 'N/A'] 17 0 65 6 3 931 0 21270 1122
CanonOneStructureINChI /src/inchi/INCHI-1-SRC/INCHI_API/libinchi/src/inchi_dll_a2.c 5 ['N/A', 'N/A', 'N/A', 'int', 'N/A'] 12 0 282 37 7 229 0 3967 277
NormOneStructureINChI /src/inchi/INCHI-1-SRC/INCHI_API/libinchi/src/inchi_dll_a2.c 6 ['N/A', 'N/A', 'N/A', 'N/A', 'int', 'N/A'] 14 0 1143 161 43 344 0 7079 182

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

Functions statically reachable by fuzzers
96.0%
1144 / 1195
Cyclomatic complexity statically reachable by fuzzers
99.0%
31784 / 32138

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
SetInChIExtInputByExtOrigAtData 222 69 31.08% ['inchi_input_fuzzer']
BnsAdjustFlowBondsRad 81 33 40.74% ['inchi_input_fuzzer']
bRadChangesAtomType 31 13 41.93% ['inchi_input_fuzzer']
bExistsAltPath 302 159 52.64% ['inchi_input_fuzzer']
MarkNonStereoAltBns 70 38 54.28% ['inchi_input_fuzzer']
inchi_ios_print 67 35 52.23% ['inchi_input_fuzzer']
GetMaxPrintfLength 190 76 40.0% ['inchi_input_fuzzer']
inchi_strbuf_update 34 8 23.52% ['inchi_input_fuzzer']
InchiTimeMsecDiff 60 13 21.66% ['inchi_input_fuzzer']
bInchiTimeIsOver 57 9 15.78% ['inchi_input_fuzzer']
PathsHaveIdenticalKnownParities 46 13 28.26% ['inchi_input_fuzzer']
InvertStereo 90 42 46.66% ['inchi_input_fuzzer']
GetStereoBondParity 60 16 26.66% ['inchi_input_fuzzer']
ErrMsg 44 9 20.45% ['inchi_input_fuzzer']
Copy2StereoBondOrAllene 80 41 51.24% ['inchi_input_fuzzer']
MarkAmbiguousStereo 71 24 33.80% ['inchi_input_fuzzer']
CompINChITautVsNonTaut 118 11 9.322% ['inchi_input_fuzzer']
CompINChILayers 703 371 52.77% ['inchi_input_fuzzer']
CompareInchiStereo 66 27 40.90% ['inchi_input_fuzzer']
CompINChI2 204 103 50.49% ['inchi_input_fuzzer']
CompareReversedINChI 196 84 42.85% ['inchi_input_fuzzer']
BreakNeighborsTie 241 86 35.68% ['inchi_input_fuzzer']
CalculatedPathsParitiesAreIdentical 475 241 50.73% ['inchi_input_fuzzer']
set_common_options_by_parg 400 71 17.75% ['inchi_input_fuzzer']
ReadCommandLineParms 1157 314 27.13% ['inchi_input_fuzzer']
PrintInputParms 414 88 21.25% ['inchi_input_fuzzer']
szGetTag 64 21 32.81% ['inchi_input_fuzzer']
OrigStruct_FillOut 89 47 52.80% ['inchi_input_fuzzer']
OutputINCHI_FixedHLayerWithSublayers 93 17 18.27% ['inchi_input_fuzzer']
OutputINCHI_PolymerLayer 171 25 14.61% ['inchi_input_fuzzer']
Eql_INChI_Stereo 130 68 52.30% ['inchi_input_fuzzer']
MakeCtStringNew 119 55 46.21% ['inchi_input_fuzzer']
str_Charge2 144 63 43.75% ['inchi_input_fuzzer']
str_Sp2 162 67 41.35% ['inchi_input_fuzzer']
str_Sp3 161 68 42.23% ['inchi_input_fuzzer']
str_IsoAtoms 184 70 38.04% ['inchi_input_fuzzer']
str_IsoSp2 190 77 40.52% ['inchi_input_fuzzer']
str_IsoSp3 188 78 41.48% ['inchi_input_fuzzer']
Check6MembTautRing 159 31 19.49% ['inchi_input_fuzzer']
InChILine2Data 1037 554 53.42% ['inchi_input_fuzzer']
ReadInChICoord 299 40 13.37% ['inchi_input_fuzzer']
SetProtonsAndXchgIsoH 143 77 53.84% ['inchi_input_fuzzer']
ParseSegmentSp2 490 175 35.71% ['inchi_input_fuzzer']
SegmentSp3CreateEmpty 50 26 52.0% ['inchi_input_fuzzer']
SegmentSp3ProcessAbbreviation 140 55 39.28% ['inchi_input_fuzzer']
SegmentSp3StoreStereoCenters 66 32 48.48% ['inchi_input_fuzzer']
CopySegment 251 131 52.19% ['inchi_input_fuzzer']
OutputInChIAsRequested 352 190 53.97% ['inchi_input_fuzzer']
ConnectDisconnectedH 84 17 20.23% ['inchi_input_fuzzer']
DisconnectedConnectedH 59 14 23.72% ['inchi_input_fuzzer']
AdjustTgroupsToForbiddenEdges2 948 365 38.50% ['inchi_input_fuzzer']
RearrangePlusMinusEdgesFlow 100 26 26.0% ['inchi_input_fuzzer']
MovePlusFromS2DiaminoCarbon 118 41 34.74% ['inchi_input_fuzzer']
RestoreCyanoGroup 81 36 44.44% ['inchi_input_fuzzer']
FixMetal_Nminus_Ominus 114 42 36.84% ['inchi_input_fuzzer']
RestoreNNNgroup 581 123 21.17% ['inchi_input_fuzzer']
PlusFromDB_N_DB_O_to_Metal 127 63 49.60% ['inchi_input_fuzzer']
SaltBondsToCoordBonds 209 36 17.22% ['inchi_input_fuzzer']
FixRestoredStructureStereo 1158 396 34.19% ['inchi_input_fuzzer']
CompareAllDisconnectedOrigInchiToRevInChI 424 139 32.78% ['inchi_input_fuzzer']
AddOneMsg 32 17 53.12% ['inchi_input_fuzzer']
FixSb0DParities 133 62 46.61% ['inchi_input_fuzzer']
set_stereo_atom_parity 395 161 40.75% ['inchi_input_fuzzer']
get_z_coord 61 31 50.81% ['inchi_input_fuzzer']
half_stereo_bond_parity 307 113 36.80% ['inchi_input_fuzzer']
MarkTautomerGroups 1446 327 22.61% ['inchi_input_fuzzer']
FreeExtOrigAtData 65 7 10.76% ['inchi_input_fuzzer']
ProcessOneStructure 216 107 49.53% ['inchi_input_fuzzer']
DoOneStructureEarlyPreprocessing 48 15 31.25% ['inchi_input_fuzzer']
PrepareSaveOptBits 50 3 6.0% ['inchi_input_fuzzer']
OrigAtData_Duplicate 274 67 24.45% ['inchi_input_fuzzer']
OAD_Polymer_CompareRanksOfTwoAtoms 124 62 50.0% ['inchi_input_fuzzer']
GetProcessingWarningsOneInChI 37 17 45.94% ['inchi_input_fuzzer']
the_only_doublet_neigh 35 12 34.28% ['inchi_input_fuzzer']
fix_odd_things 250 128 51.2% ['inchi_input_fuzzer']
DisconnectSalts 34 18 52.94% ['inchi_input_fuzzer']

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/inchi/INCHI-1-SRC/INCHI_BASE/src/ichinorm.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/mol2atom.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichiring.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichicano.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_API/libinchi/src/inchi_dll.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichimap4.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/strutil.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/mol_fmt2.c ['inchi_input_fuzzer'] []
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichiisot.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/readinch.c [] []
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichirvr3.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichirvr7.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichierr.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichiprt1.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichisort.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichirvr2.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi_input_fuzzer.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/mol_fmt4.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichiparm.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ikey_base26.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichirvr4.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/runichi4.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/util.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/runichi2.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichiprt2.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/sha2.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichirvr5.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichirvr6.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichiprt3.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichimak2.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/runichi3.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/mol_fmt3.c [] []
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichimap2.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichi_bns.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/mol_fmt1.c [] []
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichirvr1.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichiread.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/runichi.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichi_io.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ikey_dll.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_API/libinchi/src/inchi_dll_a2.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichister.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichicans.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichican2.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichimake.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichiqueu.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichitaut.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/ichimap1.c ['inchi_input_fuzzer'] ['inchi_input_fuzzer']

Directories in report

Directory
/src/inchi/INCHI-1-SRC/INCHI_BASE/src/
/src/
/src/inchi/INCHI-1-SRC/INCHI_API/libinchi/src/