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

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
90 102 9 :

['std::__1::unique_ptr >, std::__1::default_delete > > >::operator bool[abi:v180000]() const', 'std::__1::unique_ptr >, std::__1::default_delete > > > draco::MeshPredictionSchemeDecoderFactory ::operator() , draco::MeshPredictionSchemeData >(draco::PredictionSchemeMethod, draco::PointAttribute const*, draco::PredictionSchemeNormalOctahedronCanonicalizedDecodingTransform const&, draco::MeshPredictionSchemeData const&, unsigned short)', 'draco::MeshPredictionSchemeData ::MeshPredictionSchemeData()', 'draco::MeshPredictionSchemeData ::Set(draco::Mesh const*, draco::CornerTable const*, std::__1::vector , std::__1::allocator > > const*, std::__1::vector > const*)', 'draco::MeshPredictionSchemeData ::MeshPredictionSchemeData()', 'std::__1::unique_ptr >, std::__1::default_delete > > > draco::MeshPredictionSchemeDecoderFactory ::operator() , draco::MeshPredictionSchemeData >(draco::PredictionSchemeMethod, draco::PointAttribute const*, draco::PredictionSchemeNormalOctahedronCanonicalizedDecodingTransform const&, draco::MeshPredictionSchemeData const&, unsigned short)', 'draco::MeshPredictionSchemeData ::Set(draco::Mesh const*, draco::MeshAttributeCornerTable const*, std::__1::vector , std::__1::allocator > > const*, std::__1::vector > const*)', 'std::__1::unique_ptr >, std::__1::default_delete > > >::~unique_ptr[abi:v180000]()', 'draco::MeshDecoder::mesh() const']

90 102 std::__1::unique_ptr >,std::__1::default_delete >>>draco::CreateMeshPredictionScheme >,draco::MeshPredictionSchemeDecoderFactory >(draco::MeshDecoderconst*,draco::PredictionSchemeMethod,int,draco::PredictionSchemeDecoder >::Transformconst&,unsignedshort) call site: 00000 /src/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_factory.h:49
53 53 1 :

['draco::MeshEdgebreakerDecoderImpl ::DecodeAttributeConnectivitiesOnFaceLegacy(draco::IndexType )']

61 342 draco::MeshEdgebreakerDecoderImpl ::DecodeConnectivity() call site: 00000 /src/draco/src/draco/compression/mesh/mesh_edgebreaker_decoder_impl.cc:476
34 34 4 :

['operator new(unsigned long)', 'draco::MeshPredictionSchemeGeometricNormalDecoder , draco::MeshPredictionSchemeData >::MeshPredictionSchemeGeometricNormalDecoder(draco::PointAttribute const*, draco::PredictionSchemeNormalOctahedronDecodingTransform const&, draco::MeshPredictionSchemeData const&)', 'operator delete(void*)', '_ZNSt3__110unique_ptrIN5draco23PredictionSchemeDecoderIiNS1_49PredictionSchemeNormalOctahedronDecodingTransformIiEEEENS_14default_deleteIS5_EEEC2B7v180000ILb1EvEEPS5_']

34 34 draco::MeshPredictionSchemeDecoderFactory ::DispatchFunctor ,draco::MeshPredictionSchemeData ,(draco::PredictionSchemeTransformType)2>::operator()(draco::PredictionSchemeMethod,draco::PointAttributeconst*,draco::PredictionSchemeNormalOctahedronDecodingTransform const&,draco::MeshPredictionSchemeData const&,unsignedshort) call site: 00000 /src/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h:127
8 10 5 :

['draco::Status::~Status()', 'draco::StatusOr > >::StatusOr(draco::Status const&)', '_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B7v180000ILi0EEEPKc', 'draco::Status::Status(draco::Status::Code, std::__1::basic_string , std::__1::allocator > const&)', 'std::__1::basic_string , std::__1::allocator >::~basic_string()']

8 10 draco::CreateMeshDecoder(unsignedchar) call site: 00000 /src/draco/src/draco/compression/decode.cc:48
0 19 3 :

['draco::DecoderBuffer::Advance(long)', 'draco::DecoderBuffer::data_head() const', 'draco::RAnsDecoder<20>::read_init(unsigned char const*, int)']

0 19 draco::RAnsSymbolDecoder<16>::StartDecoding(draco::DecoderBuffer*) call site: 00000 /src/draco/src/draco/compression/entropy/rans_symbol_decoder.h:151
0 10 6 :

['draco::GeometryAttribute::ResetBuffer(draco::DataBuffer*, long, long)', 'std::__1::unique_ptr >::get[abi:v180000]() const', 'std::__1::unique_ptr >::operator=[abi:v180000](std::__1::unique_ptr >&&)', 'draco::DataBuffer::DataBuffer()', '_ZNSt3__110unique_ptrIN5draco10DataBufferENS_14default_deleteIS2_EEEC2B7v180000ILb1EvEEPS2_', 'std::__1::unique_ptr >::~unique_ptr[abi:v180000]()']

2 30 draco::PointAttribute::CopyFrom(draco::PointAttributeconst&) call site: 00000 /src/draco/src/draco/attributes/point_attribute.cc:47
0 10 2 :

['draco::SequentialAttributeDecoder::attribute()', 'draco::AttributeOctahedronTransform::DecodeParameters(draco::PointAttribute const&, draco::DecoderBuffer*)']

0 1117 draco::SequentialNormalAttributeDecoder::DecodeIntegerValues(std::__1::vector ,std::__1::allocator >>const&,draco::DecoderBuffer*) call site: 00000 /src/draco/src/draco/compression/attributes/sequential_normal_attribute_decoder.cc:42
0 5 1 :

['bool draco::DecoderBuffer::Decode (unsigned int*)']

0 100 draco::MeshPredictionSchemeTexCoordsDecoder ,draco::MeshPredictionSchemeData >::DecodePredictionData(draco::DecoderBuffer*) call site: 00000 /src/draco/src/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h:156
0 5 1 :

['bool draco::DecoderBuffer::Decode (unsigned long*)']

0 26 draco::RAnsSymbolDecoder<1>::StartDecoding(draco::DecoderBuffer*) call site: 00000 /src/draco/src/draco/compression/entropy/rans_symbol_decoder.h:139
0 5 1 :

['bool draco::DecoderBuffer::Decode (unsigned long*)']

0 26 draco::RAnsSymbolDecoder<4>::StartDecoding(draco::DecoderBuffer*) call site: 00000 /src/draco/src/draco/compression/entropy/rans_symbol_decoder.h:139
0 5 1 :

['bool draco::DecoderBuffer::Decode (unsigned long*)']

0 26 draco::RAnsSymbolDecoder<6>::StartDecoding(draco::DecoderBuffer*) call site: 00000 /src/draco/src/draco/compression/entropy/rans_symbol_decoder.h:139
0 5 1 :

['bool draco::DecoderBuffer::Decode (unsigned long*)']

0 26 draco::RAnsSymbolDecoder<9>::StartDecoding(draco::DecoderBuffer*) call site: 00000 /src/draco/src/draco/compression/entropy/rans_symbol_decoder.h:139

Fuzzer calltree

0 LLVMFuzzerTestOneInput [function] [call site] 00000
1 draco::DecoderBuffer::DecoderBuffer() [function] [call site] 00001
1 draco::DecoderBuffer::Init(char const*, unsigned long) [function] [call site] 00002
2 draco::DecoderBuffer::Init(char const*, unsigned long, unsigned short) [function] [call site] 00003
1 draco::Decoder::Decoder() [function] [call site] 00004
2 draco::DracoOptions<draco::GeometryAttribute::Type>::DracoOptions() [function] [call site] 00005
3 draco::Options::Options() [function] [call site] 00006
1 draco::Decoder::SetSkipAttributeTransform(draco::GeometryAttribute::Type) [function] [call site] 00007
2 draco::DracoOptions<draco::GeometryAttribute::Type>::SetAttributeBool(draco::GeometryAttribute::Type const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) [function] [call site] 00008
3 draco::DracoOptions<draco::GeometryAttribute::Type>::GetAttributeOptions(draco::GeometryAttribute::Type const&) [function] [call site] 00009
4 draco::Options::Options() [function] [call site] 00010
4 draco::Options::~Options() [function] [call site] 00011
3 draco::Options::SetBool(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) [function] [call site] 00012
1 draco::Decoder::DecodeMeshFromBuffer(draco::DecoderBuffer*) [function] [call site] 00013
2 draco::Mesh::Mesh() [function] [call site] 00014
3 draco::PointCloud::PointCloud() [function] [call site] 00015
3 draco::IndexTypeVector<draco::IndexType<unsigned int, draco::FaceIndex_tag_type_>, std::__1::array<draco::IndexType<unsigned int, draco::PointIndex_tag_type_>, 3ul> >::IndexTypeVector() [function] [call site] 00016
2 draco::Decoder::DecodeBufferToGeometry(draco::DecoderBuffer*, draco::Mesh*) [function] [call site] 00017
3 draco::PointCloudDecoder::DecodeHeader(draco::DecoderBuffer*, draco::DracoHeader*) [function] [call site] 00018
4 draco::DecoderBuffer::Decode(void*, unsigned long) [function] [call site] 00019
4 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00020
4 memcmp [call site] 00021
4 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00022
4 bool draco::DecoderBuffer::Decode<unsigned char>(unsigned char*) [function] [call site] 00023
5 bool draco::DecoderBuffer::Peek<unsigned char>(unsigned char*) [function] [call site] 00024
4 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00025
4 bool draco::DecoderBuffer::Decode<unsigned char>(unsigned char*) [function] [call site] 00026
4 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00027
4 bool draco::DecoderBuffer::Decode<unsigned char>(unsigned char*) [function] [call site] 00028
4 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00029
4 bool draco::DecoderBuffer::Decode<unsigned char>(unsigned char*) [function] [call site] 00030
4 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00031
4 bool draco::DecoderBuffer::Decode<unsigned short>(unsigned short*) [function] [call site] 00032
4 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00033
4 draco::OkStatus() [function] [call site] 00034
5 draco::Status::Status(draco::Status::Code) [function] [call site] 00035
3 draco::Status::ok() const [function] [call site] 00036
3 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00037
3 draco::CreateMeshDecoder(unsigned char) [function] [call site] 00038
4 draco::MeshSequentialDecoder::MeshSequentialDecoder() [function] [call site] 00039
5 draco::MeshDecoder::MeshDecoder() [function] [call site] 00040
6 draco::PointCloudDecoder::PointCloudDecoder() [function] [call site] 00041
4 draco::StatusOr<std::__1::unique_ptr<draco::MeshDecoder, std::__1::default_delete<draco::MeshDecoder> > >::StatusOr(std::__1::unique_ptr<draco::MeshDecoder, std::__1::default_delete<draco::MeshDecoder> >&&) [function] [call site] 00042
5 draco::OkStatus() [function] [call site] 00043
4 draco::MeshEdgebreakerDecoder::MeshEdgebreakerDecoder() [function] [call site] 00044
5 draco::MeshDecoder::MeshDecoder() [function] [call site] 00045
4 draco::StatusOr<std::__1::unique_ptr<draco::MeshDecoder, std::__1::default_delete<draco::MeshDecoder> > >::StatusOr(std::__1::unique_ptr<draco::MeshDecoder, std::__1::default_delete<draco::MeshDecoder> >&&) [function] [call site] 00046
4 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00047
4 draco::StatusOr<std::__1::unique_ptr<draco::MeshDecoder, std::__1::default_delete<draco::MeshDecoder> > >::StatusOr(draco::Status const&) [function] [call site] 00048
5 draco::Status::Status(draco::Status const&) [function] [call site] 00049
3 draco::StatusOr<std::__1::unique_ptr<draco::MeshDecoder, std::__1::default_delete<draco::MeshDecoder> > >::ok() const [function] [call site] 00050
4 draco::Status::ok() const [function] [call site] 00051
3 draco::Status::Status(draco::Status const&) [function] [call site] 00052
3 draco::MeshDecoder::Decode(draco::DracoOptions<draco::GeometryAttribute::Type> const&, draco::DecoderBuffer*, draco::Mesh*) [function] [call site] 00053
4 draco::PointCloudDecoder::Decode(draco::DracoOptions<draco::GeometryAttribute::Type> const&, draco::DecoderBuffer*, draco::PointCloud*) [function] [call site] 00054
5 draco::PointCloudDecoder::DecodeHeader(draco::DecoderBuffer*, draco::DracoHeader*) [function] [call site] 00055
5 draco::Status::ok() const [function] [call site] 00056
5 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00057
5 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00058
5 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00059
5 draco::DecoderBuffer::set_bitstream_version(unsigned short) [function] [call site] 00060
5 draco::PointCloudDecoder::bitstream_version() const [function] [call site] 00061
5 draco::PointCloudDecoder::DecodeMetadata() [function] [call site] 00062
6 draco::GeometryMetadata::GeometryMetadata() [function] [call site] 00063
7 draco::Metadata::Metadata() [function] [call site] 00064
6 draco::MetadataDecoder::MetadataDecoder() [function] [call site] 00065
6 draco::MetadataDecoder::DecodeGeometryMetadata(draco::DecoderBuffer*, draco::GeometryMetadata*) [function] [call site] 00066
7 bool draco::DecodeVarint<unsigned int>(unsigned int*, draco::DecoderBuffer*) [function] [call site] 00067
8 bool draco::(anonymous namespace)::DecodeVarintUnsigned<unsigned int>(int, unsigned int*, draco::DecoderBuffer*) [function] [call site] 00068
9 bool draco::DecoderBuffer::Decode<unsigned char>(unsigned char*) [function] [call site] 00069
9 bool draco::(anonymous namespace)::DecodeVarintUnsigned<unsigned int>(int, unsigned int*, draco::DecoderBuffer*) [function] [call site] 00070
7 bool draco::DecodeVarint<unsigned int>(unsigned int*, draco::DecoderBuffer*) [function] [call site] 00071
7 draco::AttributeMetadata::AttributeMetadata() [function] [call site] 00072
8 draco::Metadata::Metadata() [function] [call site] 00073
7 draco::AttributeMetadata::set_att_unique_id(unsigned int) [function] [call site] 00074
7 draco::MetadataDecoder::DecodeMetadata(draco::Metadata*) [function] [call site] 00075
8 draco::MetadataDecoder::DecodeName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) [function] [call site] 00076
9 bool draco::DecoderBuffer::Decode<unsigned char>(unsigned char*) [function] [call site] 00077
9 draco::DecoderBuffer::Decode(void*, unsigned long) [function] [call site] 00078
8 draco::Metadata::Metadata() [function] [call site] 00079
8 draco::Metadata::AddSubMetadata(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unique_ptr<draco::Metadata, std::__1::default_delete<draco::Metadata> >) [function] [call site] 00080
8 bool draco::DecodeVarint<unsigned int>(unsigned int*, draco::DecoderBuffer*) [function] [call site] 00081
8 draco::MetadataDecoder::DecodeEntry(draco::Metadata*) [function] [call site] 00082
9 draco::MetadataDecoder::DecodeName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) [function] [call site] 00083
9 bool draco::DecodeVarint<unsigned int>(unsigned int*, draco::DecoderBuffer*) [function] [call site] 00084
9 draco::DecoderBuffer::remaining_size() const [function] [call site] 00085
9 draco::DecoderBuffer::Decode(void*, unsigned long) [function] [call site] 00086
9 draco::Metadata::AddEntryBinary(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const&) [function] [call site] 00087
10 void draco::Metadata::AddEntry<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const&) [function] [call site] 00088
11 draco::EntryValue::EntryValue<unsigned char>(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const&) [function] [call site] 00089
8 bool draco::DecodeVarint<unsigned int>(unsigned int*, draco::DecoderBuffer*) [function] [call site] 00090
8 draco::DecoderBuffer::remaining_size() const [function] [call site] 00091
7 draco::GeometryMetadata::AddAttributeMetadata(std::__1::unique_ptr<draco::AttributeMetadata, std::__1::default_delete<draco::AttributeMetadata> >) [function] [call site] 00092
6 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00093
6 draco::PointCloud::AddMetadata(std::__1::unique_ptr<draco::GeometryMetadata, std::__1::default_delete<draco::GeometryMetadata> >) [function] [call site] 00094
6 draco::OkStatus() [function] [call site] 00095
5 draco::Status::ok() const [function] [call site] 00096
5 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00097
5 draco::Status::Status(draco::Status::Code, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00098
5 draco::OkStatus() [function] [call site] 00099
3 draco::Status::ok() const [function] [call site] 00100
3 draco::StatusOr<std::__1::unique_ptr<draco::MeshDecoder, std::__1::default_delete<draco::MeshDecoder> > >::~StatusOr() [function] [call site] 00101
4 draco::Status::~Status() [function] [call site] 00102
3 draco::DecoderBuffer::~DecoderBuffer() [function] [call site] 00103
2 draco::Status::ok() const [function] [call site] 00104
2 draco::StatusOr<std::__1::unique_ptr<draco::Mesh, std::__1::default_delete<draco::Mesh> > >::StatusOr(draco::Status const&) [function] [call site] 00105
2 draco::StatusOr<std::__1::unique_ptr<draco::Mesh, std::__1::default_delete<draco::Mesh> > >::StatusOr(std::__1::unique_ptr<draco::Mesh, std::__1::default_delete<draco::Mesh> >&&) [function] [call site] 00106
1 draco::StatusOr<std::__1::unique_ptr<draco::Mesh, std::__1::default_delete<draco::Mesh> > >::~StatusOr() [function] [call site] 00107
1 draco::Decoder::~Decoder() [function] [call site] 00108
1 draco::DecoderBuffer::~DecoderBuffer() [function] [call site] 00109