Fuzz introspector: future_pngpredictor_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
8 8 4 :

['__cxa_allocate_exception', '__cxa_throw', 'std::runtime_error::runtime_error(char const*)', '__cxa_free_exception']

8 10 Pl_PNGFilter::Pl_PNGFilter(charconst*,Pipeline*,Pl_PNGFilter::action_e,unsignedint,unsignedint,unsignedint) call site: 00000 /src/qpdf/libqpdf/Pl_PNGFilter.cc:47
6 6 1 :

['Pl_PNGFilter::encodeRow()']

6 6 Pl_PNGFilter::processRow() call site: 00000 /src/qpdf/libqpdf/Pl_PNGFilter.cc:98
0 0 None 32 38 Pl_PNGFilter::Pl_PNGFilter(charconst*,Pipeline*,Pl_PNGFilter::action_e,unsignedint,unsignedint,unsignedint) call site: 00000 /src/qpdf/libqpdf/Pl_PNGFilter.cc:31
0 0 None 8 10 Pl_PNGFilter::Pl_PNGFilter(charconst*,Pipeline*,Pl_PNGFilter::action_e,unsignedint,unsignedint,unsignedint) call site: 00000 /src/qpdf/libqpdf/Pl_PNGFilter.cc:34
0 0 None 8 10 Pl_PNGFilter::Pl_PNGFilter(charconst*,Pipeline*,Pl_PNGFilter::action_e,unsignedint,unsignedint,unsignedint) call site: 00000 /src/qpdf/libqpdf/Pl_PNGFilter.cc:44

Fuzzer calltree

0 LLVMFuzzerTestOneInput [function] [call site] 00000
1 FuzzHelper::FuzzHelper(unsigned char const*, unsigned long) [function] [call site] 00001
1 FuzzHelper::run() [function] [call site] 00002
2 FuzzHelper::doChecks() [function] [call site] 00003
3 Pl_Discard::Pl_Discard() [function] [call site] 00004
4 Pipeline::Pipeline(char const*, Pipeline*) [function] [call site] 00005
3 Pl_PNGFilter::Pl_PNGFilter(char const*, Pipeline*, Pl_PNGFilter::action_e, unsigned int, unsigned int, unsigned int) [function] [call site] 00006
4 Pipeline::Pipeline(char const*, Pipeline*) [function] [call site] 00007
4 __cxa_allocate_exception [call site] 00008
4 std::logic_error::logic_error(char const*) [call site] 00009
4 __cxa_throw [call site] 00010
4 __cxa_free_exception [call site] 00011
4 __cxa_allocate_exception [call site] 00012
4 std::runtime_error::runtime_error(char const*) [call site] 00013
4 __cxa_throw [call site] 00014
4 __cxa_free_exception [call site] 00015
4 __cxa_allocate_exception [call site] 00016
4 std::runtime_error::runtime_error(char const*) [call site] 00017
4 __cxa_throw [call site] 00018
4 __cxa_free_exception [call site] 00019
4 __cxa_allocate_exception [call site] 00020
4 std::runtime_error::runtime_error(char const*) [call site] 00021
4 __cxa_throw [call site] 00022
4 __cxa_free_exception [call site] 00023
4 __cxa_allocate_exception [call site] 00024
4 std::runtime_error::runtime_error(char const*) [call site] 00025
4 __cxa_throw [call site] 00026
4 __cxa_free_exception [call site] 00027
4 std::__1::shared_ptr<unsigned char> QUtil::make_shared_array<unsigned char>(unsigned long) [function] [call site] 00028
4 std::__1::shared_ptr<unsigned char> QUtil::make_shared_array<unsigned char>(unsigned long) [function] [call site] 00029
4 Pipeline::~Pipeline() [function] [call site] 00030
3 Pl_PNGFilter::write(unsigned char const*, unsigned long) [function] [call site] 00031
4 Pl_PNGFilter::processRow() [function] [call site] 00032
5 Pl_PNGFilter::encodeRow() [function] [call site] 00033
6 Pipeline::next() const [function] [call site] 00034
6 Pipeline::next() const [function] [call site] 00035
6 Pipeline::next() const [function] [call site] 00036
5 Pl_PNGFilter::decodeRow() [function] [call site] 00037
6 Pl_PNGFilter::decodeSub() [function] [call site] 00038
7 QTC::TC(char const*, char const*, int) [function] [call site] 00039
6 Pl_PNGFilter::decodeUp() [function] [call site] 00040
7 QTC::TC(char const*, char const*, int) [function] [call site] 00041
6 Pl_PNGFilter::decodeAverage() [function] [call site] 00042
7 QTC::TC(char const*, char const*, int) [function] [call site] 00043
6 Pl_PNGFilter::decodePaeth() [function] [call site] 00044
7 QTC::TC(char const*, char const*, int) [function] [call site] 00045
7 Pl_PNGFilter::PaethPredictor(int, int, int) [function] [call site] 00046
8 abs_diff(int, int) [function] [call site] 00047
8 abs_diff(int, int) [function] [call site] 00048
8 abs_diff(int, int) [function] [call site] 00049
6 Pipeline::next() const [function] [call site] 00050
3 Pl_PNGFilter::finish() [function] [call site] 00051
4 Pl_PNGFilter::processRow() [function] [call site] 00052
4 Pipeline::next() const [function] [call site] 00053
3 Pl_PNGFilter::~Pl_PNGFilter() [function] [call site] 00054
4 Pipeline::~Pipeline() [function] [call site] 00055
3 Pl_Discard::~Pl_Discard() [function] [call site] 00056
4 Pipeline::~Pipeline() [function] [call site] 00057
2 __cxa_begin_catch [call site] 00058
2 __cxa_end_catch [call site] 00059
2 __clang_call_terminate [call site] 00060
3 __cxa_begin_catch [call site] 00061