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

Fuzzer details

Fuzzer: fuzz_gltf

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 1031 58.0%
gold [1:9] 7 0.39%
yellow [10:29] 2 0.11%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 737 41.4%
All colors 1777 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
1972 2744 7 :

['tinygltf::detail::ArrayBegin(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator++()', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator*() const', 'bool nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator!= , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>, (decltype(nullptr))0>(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const> const&) const', 'tinygltf::TinyGLTF::LoadFromString(tinygltf::Model*, std::__1::basic_string , std::__1::allocator >*, std::__1::basic_string , std::__1::allocator >*, char const*, unsigned int, std::__1::basic_string , std::__1::allocator > const&, unsigned int)::$_3::operator()(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&) const', 'tinygltf::detail::ArrayEnd(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)']

1972 2744 booltinygltf::detail::ForEachInArray ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,charconst*,unsignedint,std::__1::basic_string ,std::__1::allocator >const&,unsignedint)::$_3>(nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,charconst*,tinygltf::TinyGLTF::LoadFromString(tinygltf::Model*,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,charconst*,unsignedint,std::__1::basic_string ,std::__1::allocator >const&,unsignedint)::$_3&&) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:5473
1704 2476 7 :

['tinygltf::detail::ArrayBegin(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator++()', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator*() const', 'bool nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator!= , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>, (decltype(nullptr))0>(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const> const&) const', 'tinygltf::detail::ArrayEnd(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'tinygltf::TinyGLTF::LoadFromString(tinygltf::Model*, std::__1::basic_string , std::__1::allocator >*, std::__1::basic_string , std::__1::allocator >*, char const*, unsigned int, std::__1::basic_string , std::__1::allocator > const&, unsigned int)::$_5::operator()(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&) const']

1704 2476 booltinygltf::detail::ForEachInArray ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,charconst*,unsignedint,std::__1::basic_string ,std::__1::allocator >const&,unsignedint)::$_5>(nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,charconst*,tinygltf::TinyGLTF::LoadFromString(tinygltf::Model*,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,charconst*,unsignedint,std::__1::basic_string ,std::__1::allocator >const&,unsignedint)::$_5&&) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:5473
1561 1561 8 :

['bool nlohmann::detail::parser , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > >, nlohmann::detail::iterator_input_adapter >::sax_parse_internal , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > > >(nlohmann::detail::json_sax_dom_callback_parser , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > >*)', 'std::__1::function , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > >&)>::function(std::__1::function , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > >&)> const&)', 'nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > >::is_discarded() const', 'nlohmann::detail::json_sax_dom_callback_parser , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > >::json_sax_dom_callback_parser(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > >&, std::__1::function , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > >&)>, bool)', 'bool nlohmann::detail::json_sax_dom_callback_parser , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > >::parse_error (unsigned long, std::__1::basic_string , std::__1::allocator > const&, nlohmann::detail::parse_error const&)', 'nlohmann::detail::json_sax_dom_callback_parser , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > >::is_errored() const', 'std::__1::function , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > >&)>::~function()', 'nlohmann::detail::json_sax_dom_callback_parser , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > >::~json_sax_dom_callback_parser()']

1579 2777 nlohmann::detail::parser ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>,nlohmann::detail::iterator_input_adapter >::parse(bool,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>&) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../json.hpp:11012
1330 2102 7 :

['tinygltf::detail::ArrayBegin(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator++()', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator*() const', 'tinygltf::TinyGLTF::LoadFromString(tinygltf::Model*, std::__1::basic_string , std::__1::allocator >*, std::__1::basic_string , std::__1::allocator >*, char const*, unsigned int, std::__1::basic_string , std::__1::allocator > const&, unsigned int)::$_13::operator()(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&) const', 'bool nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator!= , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>, (decltype(nullptr))0>(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const> const&) const', 'tinygltf::detail::ArrayEnd(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)']

1330 2102 booltinygltf::detail::ForEachInArray ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,charconst*,unsignedint,std::__1::basic_string ,std::__1::allocator >const&,unsignedint)::$_13>(nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,charconst*,tinygltf::TinyGLTF::LoadFromString(tinygltf::Model*,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,charconst*,unsignedint,std::__1::basic_string ,std::__1::allocator >const&,unsignedint)::$_13&&) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:5473
1290 2062 7 :

['tinygltf::detail::ArrayBegin(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator++()', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator*() const', 'tinygltf::TinyGLTF::LoadFromString(tinygltf::Model*, std::__1::basic_string , std::__1::allocator >*, std::__1::basic_string , std::__1::allocator >*, char const*, unsigned int, std::__1::basic_string , std::__1::allocator > const&, unsigned int)::$_4::operator()(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&) const', 'bool nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::operator!= , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>, (decltype(nullptr))0>(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const> const&) const', 'tinygltf::detail::ArrayEnd(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)']

1290 2062 booltinygltf::detail::ForEachInArray ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,charconst*,unsignedint,std::__1::basic_string ,std::__1::allocator >const&,unsignedint)::$_4>(nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,charconst*,tinygltf::TinyGLTF::LoadFromString(tinygltf::Model*,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,charconst*,unsignedint,std::__1::basic_string ,std::__1::allocator >const&,unsignedint)::$_4&&) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:5473
1179 1619 9 :

['bool tinygltf::ParseExtrasAndExtensions (tinygltf::Camera*, std::__1::basic_string , std::__1::allocator >*, nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, bool)', 'std::__1::basic_string , std::__1::allocator >::basic_string (char const*)', 'tinygltf::ParsePerspectiveCamera(tinygltf::PerspectiveCamera*, std::__1::basic_string , std::__1::allocator >*, nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, bool)', 'tinygltf::detail::FindMember(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, char const*, nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'std::__1::basic_string , std::__1::allocator >::basic_string()', 'tinygltf::ParseStringProperty(std::__1::basic_string , std::__1::allocator >*, std::__1::basic_string , std::__1::allocator >*, nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, std::__1::basic_string , std::__1::allocator > const&, bool, std::__1::basic_string , std::__1::allocator > const&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::iter_impl()', 'tinygltf::detail::IsObject(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&)']

1187 1627 tinygltf::ParseCamera(tinygltf::Camera*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,bool) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:5382
832 1278 6 :

['tinygltf::detail::FindMember(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, char const*, nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::iter_impl()', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'tinygltf::detail::JsonToString(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, int)', 'std::__1::basic_string , std::__1::allocator >::operator=(std::__1::basic_string , std::__1::allocator >&&)']

834 1280 booltinygltf::ParseExtrasAndExtensions (tinygltf::Asset*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,bool) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:4034
832 1278 6 :

['tinygltf::detail::FindMember(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, char const*, nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::iter_impl()', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'tinygltf::detail::JsonToString(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, int)', 'std::__1::basic_string , std::__1::allocator >::operator=(std::__1::basic_string , std::__1::allocator >&&)']

834 1280 booltinygltf::ParseExtrasAndExtensions (tinygltf::Primitive*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,bool) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:4034
832 1278 6 :

['tinygltf::detail::FindMember(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, char const*, nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::iter_impl()', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'tinygltf::detail::JsonToString(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, int)', 'std::__1::basic_string , std::__1::allocator >::operator=(std::__1::basic_string , std::__1::allocator >&&)']

834 1280 booltinygltf::ParseExtrasAndExtensions (tinygltf::Mesh*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,bool) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:4034
832 1278 6 :

['tinygltf::detail::FindMember(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, char const*, nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::iter_impl()', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'tinygltf::detail::JsonToString(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, int)', 'std::__1::basic_string , std::__1::allocator >::operator=(std::__1::basic_string , std::__1::allocator >&&)']

834 1280 booltinygltf::ParseExtrasAndExtensions (tinygltf::Node*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,bool) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:4034
832 1278 6 :

['tinygltf::detail::FindMember(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, char const*, nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::iter_impl()', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'tinygltf::detail::JsonToString(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, int)', 'std::__1::basic_string , std::__1::allocator >::operator=(std::__1::basic_string , std::__1::allocator >&&)']

834 1280 booltinygltf::ParseExtrasAndExtensions (tinygltf::Scene*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,bool) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:4034
832 1278 6 :

['tinygltf::detail::FindMember(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, char const*, nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'tinygltf::detail::GetValue(nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>&)', 'nlohmann::detail::iter_impl , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const>::iter_impl()', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'tinygltf::detail::JsonToString(nlohmann::basic_json , std::__1::allocator >, bool, long, unsigned long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector > > const&, int)', 'std::__1::basic_string , std::__1::allocator >::operator=(std::__1::basic_string , std::__1::allocator >&&)']

834 1280 booltinygltf::ParseExtrasAndExtensions (tinygltf::PbrMetallicRoughness*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,bool) call site: 00000 /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h:4034

Runtime coverage analysis

Covered functions
419
Functions that are reachable but not covered
315
Reachable functions
863
Percentage of reachable functions covered
63.5%
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/tinygltf/tests/fuzzer/build/../fuzz_gltf.cc 2
/src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h 71
/usr/include/x86_64-linux-gnu/sys/stat.h 1
/src/tinygltf/tests/fuzzer/build/../../../stb_image.h 103
/usr/local/bin/../include/c++/v1/math.h 2
/src/tinygltf/tests/fuzzer/build/../../../stb_image_write.h 29
/src/tinygltf/tests/fuzzer/build/../../../json.hpp 58
/usr/local/bin/../include/c++/v1/exception 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, 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
tinygltf::TinyGLTF::WriteGltfSceneToFile(tinygltf::Modelconst*,std::__1::basic_string ,std::__1::allocator >const&,bool,bool,bool,bool) /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h 7 ['class.tinygltf::TinyGLTF *', 'class.tinygltf::Model *', 'class.std::__1::basic_string *', 'N/A', 'N/A', 'N/A', 'N/A'] 7 0 1389 185 7 488 0 2213 1749
nlohmann::detail::parser ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>,nlohmann::detail::iterator_input_adapter >::parse(bool,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>&) /src/tinygltf/tests/fuzzer/build/../../../json.hpp 3 ['class.nlohmann::detail::parser *', 'N/A', 'class.nlohmann::basic_json *'] 5 0 880 88 88 267 0 1470 1103
stbi__jpeg_load(stbi__context*,int*,int*,int*,int,stbi__result_info*) /src/tinygltf/tests/fuzzer/build/../../../stb_image.h 5 ['struct.stbi__context *', 'int *', 'int *', 'int *', 'int '] 7 0 48 8 3 113 0 1140 681
stbi_info /src/tinygltf/tests/fuzzer/build/../../../stb_image.h 4 ['char *', 'int *', 'int *', 'int *'] 5 0 32 6 3 192 0 1400 274
stbi_load_gif_from_memory /src/tinygltf/tests/fuzzer/build/../../../stb_image.h 8 ['char *', 'int ', 'int **', 'int *', 'int *', 'int *', 'int *', 'int '] 3 0 216 31 12 73 0 446 213
stbi__bmp_load(stbi__context*,int*,int*,int*,int,stbi__result_info*) /src/tinygltf/tests/fuzzer/build/../../../stb_image.h 5 ['struct.stbi__context *', 'int *', 'int *', 'int *', 'int '] 5 0 2685 523 187 48 0 421 199
stbi__psd_load(stbi__context*,int*,int*,int*,int,stbi__result_info*,int) /src/tinygltf/tests/fuzzer/build/../../../stb_image.h 7 ['struct.stbi__context *', 'int *', 'int *', 'int *', 'int ', 'struct.stbi__result_info *', 'int '] 3 0 1048 212 81 42 0 329 181
stbi_write_hdr /src/tinygltf/tests/fuzzer/build/../../../stb_image_write.h 5 ['char *', 'int ', 'int ', 'int ', 'N/A'] 3 0 121 13 6 41 0 173 131
tinygltf::GetFileSizeInBytes(unsignedlong*,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >const&,void*) /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h 4 ['size_t *', 'class.std::__1::basic_string *', 'class.std::__1::basic_string *', 'char *'] 0 0 744 98 92 5 0 102 92
tinygltf::TinyGLTF::LoadBinaryFromFile(tinygltf::Model*,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >const&,unsignedint) /src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h 6 ['class.tinygltf::TinyGLTF *', 'class.tinygltf::Model *', 'class.std::__1::basic_string *', 'class.std::__1::basic_string *', 'class.std::__1::basic_string *', 'int '] 9 0 451 53 47 562 0 3301 92

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

Functions statically reachable by fuzzers
73.0%
731 / 1000
Cyclomatic complexity statically reachable by fuzzers
86.0%
10305 / 12036

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
nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>::json_value::json_value(nlohmann::detail::value_t) 60 17 28.33% ['fuzz_gltf']
nlohmann::detail::parser ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>,nlohmann::detail::iterator_input_adapter >::parse(bool,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>&) 40 16 40.0% []
nlohmann::detail::iter_impl ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const>::set_begin() 33 13 39.39% ['fuzz_gltf']
nlohmann::detail::iter_impl ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const>::operator*()const 33 11 33.33% ['fuzz_gltf']
stbi__parse_png_file(stbi__png*,int,int) 160 11 6.875% ['fuzz_gltf']
stbi__bmp_parse_header(stbi__context*,stbi__bmp_data*) 75 38 50.66% []
load_jpeg_image(stbi__jpeg*,int*,int*,int*,int) 137 70 51.09% []
tinygltf::ParseNumberArrayProperty(std::__1::vector >*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,std::__1::basic_string ,std::__1::allocator >const&,bool,std::__1::basic_string ,std::__1::allocator >const&) 47 23 48.93% ['fuzz_gltf']
tinygltf::LoadExternalFile(std::__1::vector >*,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >const&,std::__1::basic_string ,std::__1::allocator >const&,bool,unsignedlong,bool,unsignedlong,tinygltf::FsCallbacks*) 74 15 20.27% ['fuzz_gltf']
tinygltf::ParseIntegerArrayProperty(std::__1::vector >*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,std::__1::basic_string ,std::__1::allocator >const&,bool,std::__1::basic_string ,std::__1::allocator >const&) 47 23 48.93% ['fuzz_gltf']
tinygltf::TinyGLTF::LoadFromString(tinygltf::Model*,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,charconst*,unsignedint,std::__1::basic_string ,std::__1::allocator >const&,unsignedint)::$_10::operator()(nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&)const 54 19 35.18% ['fuzz_gltf']
tinygltf::ParseImage(tinygltf::Image*,int,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,bool,std::__1::basic_string ,std::__1::allocator >const&,unsignedlong,tinygltf::FsCallbacks*,tinygltf::URICallbacksconst*,bool(**)(tinygltf::Image*,int,std::__1::basic_string ,std::__1::allocator >*,std::__1::basic_string ,std::__1::allocator >*,int,int,unsignedcharconst*,int,void*),void*) 104 47 45.19% ['fuzz_gltf']
tinygltf::ParseCamera(tinygltf::Camera*,std::__1::basic_string ,std::__1::allocator >*,nlohmann::basic_json ,std::__1::allocator >,bool,long,unsignedlong,double,std::__1::allocator,nlohmann::adl_serializer,std::__1::vector >>const&,bool) 65 14 21.53% ['fuzz_gltf']

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
[] []
/usr/include/x86_64-linux-gnu/sys/stat.h ['fuzz_gltf'] []
/usr/local/bin/../include/c++/v1/iosfwd [] []
/usr/local/bin/../include/c++/v1/stdexcept [] []
/usr/include/ctype.h [] []
/usr/local/bin/../include/c++/v1/initializer_list [] []
/src/tinygltf/tests/fuzzer/build/../../../json.hpp ['fuzz_gltf'] []
/src/tinygltf/tests/fuzzer/build/../../../stb_image.h ['fuzz_gltf'] []
/usr/local/bin/../include/c++/v1/istream [] []
/src/tinygltf/tests/fuzzer/build/../../../stb_image_write.h ['fuzz_gltf'] []
/src/tinygltf/tests/fuzzer/build/../fuzz_gltf.cc ['fuzz_gltf'] []
/usr/local/bin/../include/c++/v1/exception ['fuzz_gltf'] []
/usr/local/bin/../include/c++/v1/math.h ['fuzz_gltf'] []
/src/tinygltf/tests/fuzzer/build/../../../tiny_gltf.h ['fuzz_gltf'] []

Directories in report

Directory
/src/tinygltf/tests/fuzzer/build/../
/usr/local/bin/../include/c++/v1/
/src/tinygltf/tests/fuzzer/build/../../../
/usr/include/
/usr/include/x86_64-linux-gnu/sys/