Fuzz introspector: fuzzdecoder
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
6 6 1 :

['ser4cpp::RSeq ::empty()']

6 6 ser4cpp::RSeq ser4cpp::WSeq ::transfer_from<&memcpy>(ser4cpp::RSeq const&) call site: 00000 /src/opendnp3/_deps/ser4cpp-src/src/ser4cpp/container/WSeq.h:124
3 8 2 :

['opendnp3::Logger::log(opendnp3::LogLevel const&, char const*, char const*)', 'opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const']

3 16 opendnp3::TransportRx::ProcessReceive(opendnp3::Messageconst&) call site: 00000 /src/opendnp3/cpp/lib/src/transport/TransportRx.cpp:112
3 8 2 :

['opendnp3::Logger::log(opendnp3::LogLevel const&, char const*, char const*)', 'opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const']

3 8 opendnp3::LinkLayerParser::ReadHeader() call site: 00000 /src/opendnp3/cpp/lib/src/link/LinkLayerParser.cpp:160
0 8 1 :

['opendnp3::LinkLayerParser::FailFrame()']

0 8 opendnp3::LinkLayerParser::ParseBody() call site: 00000 /src/opendnp3/cpp/lib/src/link/LinkLayerParser.cpp:130
0 0 None 3 16 opendnp3::TransportRx::ProcessReceive(opendnp3::Messageconst&) call site: 00000 /src/opendnp3/cpp/lib/src/transport/TransportRx.cpp:59
0 0 None 3 16 opendnp3::TransportRx::ProcessReceive(opendnp3::Messageconst&) call site: 00000 /src/opendnp3/cpp/lib/src/transport/TransportRx.cpp:99
0 0 2 :

['std::__1::basic_ostream >::operator<<(unsigned long)', 'std::__1::basic_ostream >& std::__1::operator<< >(std::__1::basic_ostream >&, char const*)']

3 8 opendnp3::LoggingHandler::PrintVQTStringify >const&)::$_3>(opendnp3::GroupVariation,opendnp3::ICollection >const&,opendnp3::LoggingHandler::ProcessHeader(opendnp3::RangeHeaderconst&,opendnp3::ICollection >const&)::$_3const&)::{lambda(opendnp3::Indexed const&)#1}::operator()(opendnp3::Indexed const&)const call site: 00000 /src/opendnp3/cpp/lib/src/decoder/LoggingHandler.h:252
0 0 2 :

['std::__1::basic_ostream >::operator<<(unsigned long)', 'std::__1::basic_ostream >& std::__1::operator<< >(std::__1::basic_ostream >&, char const*)']

3 8 opendnp3::LoggingHandler::PrintVQTStringify >const&)::$_4>(opendnp3::GroupVariation,opendnp3::ICollection >const&,opendnp3::LoggingHandler::ProcessHeader(opendnp3::RangeHeaderconst&,opendnp3::ICollection >const&)::$_4const&)::{lambda(opendnp3::Indexed const&)#1}::operator()(opendnp3::Indexed const&)const call site: 00000 /src/opendnp3/cpp/lib/src/decoder/LoggingHandler.h:252
0 0 None 3 8 opendnp3::LinkLayerParser::ValidateBody() call site: 00000 /src/opendnp3/cpp/lib/src/link/LinkLayerParser.cpp:175
0 0 1 :

['std::__1::basic_string , std::__1::allocator >::basic_string (char const*)']

0 0 opendnp3::LoggingHandler::ToUTCString(opendnp3::DNPTimeconst&) call site: 00000 /src/opendnp3/cpp/lib/src/decoder/LoggingHandler.cpp:56

Fuzzer calltree

0 LLVMFuzzerTestOneInput [function] [call site] 00000
1 opendnp3::Buffer::Buffer(unsigned char const*, unsigned long) [function] [call site] 00001
1 opendnp3::ConsoleLogger::Create(bool) [function] [call site] 00002
1 opendnp3::ModuleId::ModuleId() [function] [call site] 00003
1 opendnp3::Logger::Logger(std::__1::shared_ptr<opendnp3::ILogHandler> const&, opendnp3::ModuleId, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, opendnp3::LogLevels) [function] [call site] 00004
1 opendnp3::IDecoderCallbacks::IDecoderCallbacks() [function] [call site] 00005
2 opendnp3::Uncopyable::Uncopyable() [function] [call site] 00006
1 opendnp3::Decoder::Decoder(opendnp3::IDecoderCallbacks&, opendnp3::Logger const&) [function] [call site] 00007
2 opendnp3::DecoderImpl::DecoderImpl(opendnp3::IDecoderCallbacks&, opendnp3::Logger const&) [function] [call site] 00008
3 opendnp3::IFrameSink::IFrameSink() [function] [call site] 00009
3 opendnp3::Logger::Logger(opendnp3::Logger const&) [function] [call site] 00010
3 opendnp3::LinkLayerParser::LinkLayerParser(opendnp3::Logger const&) [function] [call site] 00011
4 opendnp3::Logger::Logger(opendnp3::Logger const&) [function] [call site] 00012
4 opendnp3::LinkStatistics::Parser::Parser() [function] [call site] 00013
4 opendnp3::LinkHeader::LinkHeader() [function] [call site] 00014
4 ser4cpp::RSeq<unsigned long>::RSeq() [function] [call site] 00015
5 ser4cpp::HasLength<unsigned long>::HasLength(unsigned long) [function] [call site] 00016
4 opendnp3::ShiftableBuffer::ShiftableBuffer(unsigned char*, unsigned long) [function] [call site] 00017
4 opendnp3::Logger::~Logger() [function] [call site] 00018
3 opendnp3::TransportRx::TransportRx(opendnp3::Logger const&, unsigned int) [function] [call site] 00019
4 opendnp3::Logger::Logger(opendnp3::Logger const&) [function] [call site] 00020
4 opendnp3::StackStatistics::Transport::Rx::Rx() [function] [call site] 00021
4 ser4cpp::Buffer::Buffer(unsigned long) [function] [call site] 00022
5 ser4cpp::HasLength<unsigned long>::HasLength(unsigned long) [function] [call site] 00023
5 ser4cpp::Uncopyable::Uncopyable() [function] [call site] 00024
5 ser4cpp::Uncopyable::~Uncopyable() [function] [call site] 00025
4 opendnp3::Addresses::Addresses() [function] [call site] 00026
4 opendnp3::SequenceNum<unsigned char, (unsigned char)64>::SequenceNum() [function] [call site] 00027
4 opendnp3::Logger::~Logger() [function] [call site] 00028
3 opendnp3::LinkLayerParser::~LinkLayerParser() [function] [call site] 00029
4 opendnp3::Logger::~Logger() [function] [call site] 00030
3 opendnp3::Logger::~Logger() [function] [call site] 00031
3 opendnp3::IFrameSink::~IFrameSink() [function] [call site] 00032
1 opendnp3::Decoder::DecodeLPDU(opendnp3::Buffer const&) [function] [call site] 00033
2 opendnp3::DecoderImpl::DecodeLPDU(ser4cpp::RSeq<unsigned long> const&) [function] [call site] 00034
3 opendnp3::Indent::Indent(opendnp3::IDecoderCallbacks&) [function] [call site] 00035
4 opendnp3::Uncopyable::Uncopyable() [function] [call site] 00036
4 opendnp3::Uncopyable::~Uncopyable() [function] [call site] 00037
3 ser4cpp::HasLength<unsigned long>::is_not_empty() const [function] [call site] 00038
3 opendnp3::LinkLayerParser::WriteBuff() const [function] [call site] 00039
4 opendnp3::ShiftableBuffer::WriteBuff() const [function] [call site] 00040
4 ser4cpp::WSeq<unsigned long>::WSeq(unsigned char*, unsigned long) [function] [call site] 00041
3 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00042
3 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00043
3 ser4cpp::RSeq<unsigned long>::take(unsigned long) const [function] [call site] 00044
4 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00045
4 ser4cpp::RSeq<unsigned long>::RSeq(unsigned char const*, unsigned long) [function] [call site] 00046
5 ser4cpp::HasLength<unsigned long>::HasLength(unsigned long) [function] [call site] 00047
3 ser4cpp::WSeq<unsigned long>::copy_from(ser4cpp::RSeq<unsigned long> const&) [function] [call site] 00048
4 ser4cpp::RSeq<unsigned long> ser4cpp::WSeq<unsigned long>::transfer_from<&memcpy>(ser4cpp::RSeq<unsigned long> const&) [function] [call site] 00049
5 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00050
5 ser4cpp::RSeq<unsigned long>::empty() [function] [call site] 00051
6 ser4cpp::RSeq<unsigned long>::RSeq(unsigned char const*, unsigned long) [function] [call site] 00052
5 ser4cpp::WSeq<unsigned long>::readonly() const [function] [call site] 00053
6 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00054
6 ser4cpp::RSeq<unsigned long>::RSeq(unsigned char const*, unsigned long) [function] [call site] 00055
5 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00056
5 ser4cpp::RSeq<unsigned long>::take(unsigned long) const [function] [call site] 00057
5 ser4cpp::RSeq<unsigned long>::operator unsigned char const*() const [function] [call site] 00058
5 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00059
5 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00060
5 ser4cpp::WSeq<unsigned long>::advance(unsigned long) [function] [call site] 00061
6 unsigned long ser4cpp::min<unsigned long>(unsigned long, unsigned long) [function] [call site] 00062
3 opendnp3::LinkLayerParser::OnRead(unsigned long, opendnp3::IFrameSink&) [function] [call site] 00063
4 opendnp3::ShiftableBuffer::AdvanceWrite(unsigned long) [function] [call site] 00064
5 opendnp3::ShiftableBuffer::NumWriteBytes() const [function] [call site] 00065
5 __assert_fail [call site] 00066
4 opendnp3::LinkLayerParser::ParseUntilComplete() [function] [call site] 00067
5 opendnp3::LinkLayerParser::ParseOneStep() [function] [call site] 00068
6 opendnp3::LinkLayerParser::ParseSync() [function] [call site] 00069
7 opendnp3::ShiftableBuffer::NumBytesRead() const [function] [call site] 00070
7 opendnp3::ShiftableBuffer::Sync(unsigned long&) [function] [call site] 00071
8 opendnp3::ShiftableBuffer::NumBytesRead() const [function] [call site] 00072
8 opendnp3::ShiftableBuffer::ReadBuffer() const [function] [call site] 00073
9 opendnp3::ShiftableBuffer::NumBytesRead() const [function] [call site] 00074
9 ser4cpp::RSeq<unsigned long>::RSeq(unsigned char const*, unsigned long) [function] [call site] 00075
8 ser4cpp::RSeq<unsigned long>::operator unsigned char const*() const [function] [call site] 00076
8 opendnp3::ShiftableBuffer::AdvanceRead(unsigned long) [function] [call site] 00077
9 opendnp3::ShiftableBuffer::NumBytesRead() const [function] [call site] 00078
9 __assert_fail [call site] 00079
7 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00080
8 opendnp3::LogLevels::is_set(opendnp3::LogLevel const&) const [function] [call site] 00081
7 snprintf [call site] 00082
6 opendnp3::LinkLayerParser::ParseHeader() [function] [call site] 00083
7 opendnp3::ShiftableBuffer::NumBytesRead() const [function] [call site] 00084
7 opendnp3::LinkLayerParser::ReadHeader() [function] [call site] 00085
8 opendnp3::ShiftableBuffer::ReadBuffer() const [function] [call site] 00086
8 ser4cpp::RSeq<unsigned long>::operator unsigned char const*() const [function] [call site] 00087
8 opendnp3::LinkHeader::Read(unsigned char const*) [function] [call site] 00088
9 ser4cpp::RSeq<unsigned long>::RSeq(unsigned char const*, unsigned long) [function] [call site] 00089
9 ser4cpp::Bit16<unsigned short, (unsigned char)0, (unsigned char)1>::read_from(ser4cpp::RSeq<unsigned long>&, unsigned short&) [function] [call site] 00090
10 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00091
10 ser4cpp::RSeq<unsigned long>::operator unsigned char const*() const [function] [call site] 00092
10 ser4cpp::Bit16<unsigned short, (unsigned char)0, (unsigned char)1>::read(unsigned char const*) [function] [call site] 00093
10 ser4cpp::RSeq<unsigned long>::advance(unsigned long) [function] [call site] 00094
11 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00095
11 unsigned long ser4cpp::min<unsigned long>(unsigned long, unsigned long) [function] [call site] 00096
9 ser4cpp::Bit16<unsigned short, (unsigned char)0, (unsigned char)1>::read_from(ser4cpp::RSeq<unsigned long>&, unsigned short&) [function] [call site] 00097
8 opendnp3::ShiftableBuffer::ReadBuffer() const [function] [call site] 00098
8 ser4cpp::RSeq<unsigned long>::operator unsigned char const*() const [function] [call site] 00099
8 opendnp3::CRC::IsCorrectCRC(unsigned char const*, unsigned long) [function] [call site] 00100
8 opendnp3::LinkLayerParser::ValidateHeaderParameters() [function] [call site] 00101
9 opendnp3::LinkHeader::ValidLength() [function] [call site] 00102
9 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00103
9 opendnp3::LinkHeader::GetLength() const [function] [call site] 00104
9 snprintf [call site] 00105
9 opendnp3::LinkLayerParser::ValidateFunctionCode() [function] [call site] 00106
10 opendnp3::LinkHeader::IsPriToSec() const [function] [call site] 00107
10 opendnp3::LinkHeader::GetFuncEnum() const [function] [call site] 00108
11 opendnp3::LinkFunctionSpec::from_type(unsigned char) [function] [call site] 00109
10 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00110
10 opendnp3::LinkHeader::GetFuncEnum() const [function] [call site] 00111
10 opendnp3::LinkFunctionSpec::to_human_string(opendnp3::LinkFunction) [function] [call site] 00112
10 snprintf [call site] 00113
10 opendnp3::LinkHeader::IsFcvDfcSet() const [function] [call site] 00114
10 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00115
10 opendnp3::LinkHeader::GetFuncEnum() const [function] [call site] 00116
10 opendnp3::LinkFunctionSpec::to_human_string(opendnp3::LinkFunction) [function] [call site] 00117
10 snprintf [call site] 00118
10 opendnp3::LinkHeader::GetFuncEnum() const [function] [call site] 00119
10 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00120
10 opendnp3::LinkHeader::GetFuncEnum() const [function] [call site] 00121
10 opendnp3::LinkFunctionSpec::to_human_string(opendnp3::LinkFunction) [function] [call site] 00122
10 snprintf [call site] 00123
10 opendnp3::LinkHeader::IsFcbSet() const [function] [call site] 00124
10 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00125
10 opendnp3::LinkHeader::GetFuncEnum() const [function] [call site] 00126
10 opendnp3::LinkFunctionSpec::to_human_string(opendnp3::LinkFunction) [function] [call site] 00127
10 snprintf [call site] 00128
9 opendnp3::LinkHeader::GetLength() const [function] [call site] 00129
9 opendnp3::LinkFrame::CalcFrameSize(unsigned long) [function] [call site] 00130
10 opendnp3::LinkFrame::CalcUserDataSize(unsigned long) [function] [call site] 00131
9 opendnp3::LinkHeader::GetFuncEnum() const [function] [call site] 00132
9 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00133
9 opendnp3::LinkFunctionSpec::to_human_string(opendnp3::LinkFunction) [function] [call site] 00134
9 snprintf [call site] 00135
9 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00136
9 opendnp3::LinkFunctionSpec::to_human_string(opendnp3::LinkFunction) [function] [call site] 00137
9 snprintf [call site] 00138
9 opendnp3::LinkFrame::CalcFrameSize(unsigned long) [function] [call site] 00139
8 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00140
7 opendnp3::LinkLayerParser::FailFrame() [function] [call site] 00141
8 opendnp3::ShiftableBuffer::AdvanceRead(unsigned long) [function] [call site] 00142
6 opendnp3::LinkLayerParser::ParseBody() [function] [call site] 00143
7 opendnp3::ShiftableBuffer::NumBytesRead() const [function] [call site] 00144
7 opendnp3::LinkLayerParser::ValidateBody() [function] [call site] 00145
8 opendnp3::LinkHeader::GetLength() const [function] [call site] 00146
8 opendnp3::ShiftableBuffer::ReadBuffer() const [function] [call site] 00147
8 ser4cpp::RSeq<unsigned long>::operator unsigned char const*() const [function] [call site] 00148
8 opendnp3::LinkFrame::ValidateBodyCRC(unsigned char const*, unsigned long) [function] [call site] 00149
9 opendnp3::CRC::IsCorrectCRC(unsigned char const*, unsigned long) [function] [call site] 00150
8 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00151
8 opendnp3::LinkHeader::GetFuncEnum() const [function] [call site] 00152
8 opendnp3::LinkFunctionSpec::to_human_string(opendnp3::LinkFunction) [function] [call site] 00153
8 snprintf [call site] 00154
8 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00155
8 opendnp3::ShiftableBuffer::ReadBuffer() const [function] [call site] 00156
8 ser4cpp::RSeq<unsigned long>::take(unsigned long) const [function] [call site] 00157
8 opendnp3::HexLogging::log(opendnp3::Logger&, opendnp3::LogLevel, ser4cpp::RSeq<unsigned long> const&, char, unsigned int, unsigned int) [function] [call site] 00158
9 unsigned int ser4cpp::bounded<unsigned int>(unsigned int, unsigned int, unsigned int) [function] [call site] 00159
10 unsigned int ser4cpp::max<unsigned int>(unsigned int, unsigned int) [function] [call site] 00160
9 unsigned int ser4cpp::bounded<unsigned int>(unsigned int, unsigned int, unsigned int) [function] [call site] 00161
9 ser4cpp::HasLength<unsigned long>::is_not_empty() const [function] [call site] 00162
9 opendnp3::HexLogging::log_line(opendnp3::Logger&, opendnp3::LogLevel, ser4cpp::RSeq<unsigned long> const&, char, unsigned int) [function] [call site] 00163
10 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00164
10 ser4cpp::HexConversions::to_hex_char(char) [function] [call site] 00165
10 ser4cpp::RSeq<unsigned long>::operator unsigned char const*() const [function] [call site] 00166
10 ser4cpp::HexConversions::to_hex_char(char) [function] [call site] 00167
10 opendnp3::Logger::log(opendnp3::LogLevel const&, char const*, char const*) [function] [call site] 00168
10 ser4cpp::RSeq<unsigned long>::skip(unsigned long) const [function] [call site] 00169
11 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00170
11 unsigned long ser4cpp::min<unsigned long>(unsigned long, unsigned long) [function] [call site] 00171
11 ser4cpp::HasLength<unsigned long>::length() const [function] [call site] 00172
11 ser4cpp::RSeq<unsigned long>::RSeq(unsigned char const*, unsigned long) [function] [call site] 00173
8 opendnp3::Logger::is_enabled(opendnp3::LogLevel const&) const [function] [call site] 00174
7 opendnp3::LinkLayerParser::TransferUserData() [function] [call site] 00175
8 opendnp3::LinkHeader::GetLength() const [function] [call site] 00176
8 opendnp3::ShiftableBuffer::ReadBuffer() const [function] [call site] 00177
8 ser4cpp::RSeq<unsigned long>::operator unsigned char const*() const [function] [call site] 00178
8 opendnp3::LinkFrame::ReadUserData(unsigned char const*, unsigned char*, unsigned long) [function] [call site] 00179
8 ser4cpp::RSeq<unsigned long>::RSeq(unsigned char const*, unsigned long) [function] [call site] 00180
7 opendnp3::LinkLayerParser::FailFrame() [function] [call site] 00181
4 opendnp3::LinkLayerParser::PushFrame(opendnp3::IFrameSink&) [function] [call site] 00182
5 opendnp3::LinkHeader::GetFuncEnum() const [function] [call site] 00183
5 opendnp3::LinkHeader::GetSrc() const [function] [call site] 00184
5 opendnp3::Addresses::Addresses(unsigned short, unsigned short) [function] [call site] 00185
5 opendnp3::LinkHeaderFields::LinkHeaderFields(opendnp3::LinkFunction, bool, bool, bool, opendnp3::Addresses) [function] [call site] 00186
5 opendnp3::ShiftableBuffer::AdvanceRead(unsigned long) [function] [call site] 00187
4 opendnp3::ShiftableBuffer::Shift() [function] [call site] 00188
5 opendnp3::ShiftableBuffer::NumBytesRead() const [function] [call site] 00189
3 ser4cpp::RSeq<unsigned long>::advance(unsigned long) [function] [call site] 00190
3 opendnp3::Indent::~Indent() [function] [call site] 00191
4 opendnp3::Uncopyable::~Uncopyable() [function] [call site] 00192
4 __clang_call_terminate [call site] 00193
5 __cxa_begin_catch [call site] 00194
1 opendnp3::Decoder::~Decoder() [function] [call site] 00195
2 opendnp3::DecoderImpl::~DecoderImpl() [function] [call site] 00196
3 opendnp3::TransportRx::~TransportRx() [function] [call site] 00197
4 ser4cpp::Buffer::~Buffer() [function] [call site] 00198
5 ser4cpp::Uncopyable::~Uncopyable() [function] [call site] 00199
4 opendnp3::Logger::~Logger() [function] [call site] 00200
3 opendnp3::LinkLayerParser::~LinkLayerParser() [function] [call site] 00201
3 opendnp3::IFrameSink::~IFrameSink() [function] [call site] 00202
1 opendnp3::Uncopyable::~Uncopyable() [function] [call site] 00203