Fuzz introspector: future_tiffpredictor_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
10 10 4 :

['__cxa_allocate_exception', '__cxa_throw', 'std::out_of_range::out_of_range[abi:ne180100](char const*)', '__cxa_free_exception']

10 10 read_bits(unsignedcharconst*&,unsignedlong&,unsignedlong&,unsignedlong) call site: 00000 /src/qpdf/libqpdf/qpdf/bits_functions.hh:34
10 10 4 :

['__cxa_allocate_exception', '__cxa_throw', 'std::out_of_range::out_of_range[abi:ne180100](char const*)', '__cxa_free_exception']

10 10 write_bits(unsignedchar&,unsignedlong&,unsignedlonglong,unsignedlong,Pipeline*) call site: 00000 /src/qpdf/libqpdf/qpdf/bits_functions.hh:89
8 8 4 :

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

8 8 BitStream::reset() call site: 00000 /src/qpdf/libqpdf/BitStream.cc:21
0 0 None 32 34 Pl_TIFFPredictor::Pl_TIFFPredictor(charconst*,Pipeline*,Pl_TIFFPredictor::action_e,unsignedint,unsignedint,unsignedint) call site: 00000 /src/qpdf/libqpdf/Pl_TIFFPredictor.cc:28
0 0 None 8 10 Pl_TIFFPredictor::Pl_TIFFPredictor(charconst*,Pipeline*,Pl_TIFFPredictor::action_e,unsignedint,unsignedint,unsignedint) call site: 00000 /src/qpdf/libqpdf/Pl_TIFFPredictor.cc:31
0 0 None 8 10 Pl_TIFFPredictor::Pl_TIFFPredictor(charconst*,Pipeline*,Pl_TIFFPredictor::action_e,unsignedint,unsignedint,unsignedint) call site: 00000 /src/qpdf/libqpdf/Pl_TIFFPredictor.cc:34
0 0 None 8 10 Pl_TIFFPredictor::Pl_TIFFPredictor(charconst*,Pipeline*,Pl_TIFFPredictor::action_e,unsignedint,unsignedint,unsignedint) call site: 00000 /src/qpdf/libqpdf/Pl_TIFFPredictor.cc:38
0 0 None 0 86 Pl_TIFFPredictor::processRow() call site: 00000 /src/qpdf/libqpdf/Pl_TIFFPredictor.cc:85
0 0 None 0 2 Pl_TIFFPredictor::processRow() call site: 00000 /src/qpdf/libqpdf/Pl_TIFFPredictor.cc:107

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_TIFFPredictor::Pl_TIFFPredictor(char const*, Pipeline*, Pl_TIFFPredictor::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 Pipeline::~Pipeline() [function] [call site] 00028
3 Pl_TIFFPredictor::write(unsigned char const*, unsigned long) [function] [call site] 00029
4 Pl_TIFFPredictor::processRow() [function] [call site] 00030
5 QTC::TC(char const*, char const*, int) [function] [call site] 00031
5 Pipeline::next() const [function] [call site] 00032
5 BitWriter::BitWriter(Pipeline*) [function] [call site] 00033
5 BitStream::BitStream(unsigned char const*, unsigned long) [function] [call site] 00034
6 BitStream::reset() [function] [call site] 00035
7 unsigned int QIntC::to_uint<unsigned long>(unsigned long const&) [function] [call site] 00036
8 QIntC::IntConverter<unsigned long, unsigned int, false, false>::convert(unsigned long const&) [function] [call site] 00037
9 QIntC::IntConverter<unsigned long, unsigned int, false, false>::error(unsigned long) [function] [call site] 00038
10 __cxa_allocate_exception [call site] 00039
10 std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str[abi:ne180100]() const & [function] [call site] 00040
11 std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str[abi:ne180100]() const & [function] [call site] 00041
10 std::range_error::range_error[abi:ne180100](std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [function] [call site] 00042
11 std::runtime_error::runtime_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [call site] 00043
10 __cxa_throw [call site] 00044
10 __cxa_free_exception [call site] 00045
7 __cxa_allocate_exception [call site] 00046
7 std::runtime_error::runtime_error(char const*) [call site] 00047
7 __cxa_throw [call site] 00048
7 std::runtime_error::~runtime_error() [call site] 00049
7 __cxa_free_exception [call site] 00050
5 BitStream::getBitsSigned(unsigned long) [function] [call site] 00051
6 read_bits(unsigned char const*&, unsigned long&, unsigned long&, unsigned long) [function] [call site] 00052
7 __cxa_allocate_exception [call site] 00053
7 std::runtime_error::runtime_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) [call site] 00054
7 __cxa_throw [call site] 00055
7 __cxa_free_exception [call site] 00056
7 std::out_of_range::out_of_range[abi:ne180100](char const*) [function] [call site] 00057
8 std::logic_error::logic_error(char const*) [call site] 00058
7 std::out_of_range::~out_of_range() [call site] 00059
5 BitWriter::writeBitsSigned(long long, unsigned long) [function] [call site] 00060
6 BitWriter::writeBits(unsigned long long, unsigned long) [function] [call site] 00061
7 write_bits(unsigned char&, unsigned long&, unsigned long long, unsigned long, Pipeline*) [function] [call site] 00062
8 __cxa_allocate_exception [call site] 00063
8 std::out_of_range::out_of_range[abi:ne180100](char const*) [function] [call site] 00064
8 __cxa_throw [call site] 00065
8 std::out_of_range::~out_of_range() [call site] 00066
8 __cxa_free_exception [call site] 00067
5 BitWriter::flush() [function] [call site] 00068
6 write_bits(unsigned char&, unsigned long&, unsigned long long, unsigned long, Pipeline*) [function] [call site] 00069
5 Pipeline::next() const [function] [call site] 00070
3 Pl_TIFFPredictor::finish() [function] [call site] 00071
4 Pl_TIFFPredictor::processRow() [function] [call site] 00072
4 Pipeline::next() const [function] [call site] 00073
3 Pl_TIFFPredictor::Pl_TIFFPredictor(char const*, Pipeline*, Pl_TIFFPredictor::action_e, unsigned int, unsigned int, unsigned int) [function] [call site] 00074
3 Pl_TIFFPredictor::write(unsigned char const*, unsigned long) [function] [call site] 00075
3 Pl_TIFFPredictor::finish() [function] [call site] 00076
3 Pl_TIFFPredictor::~Pl_TIFFPredictor() [function] [call site] 00077
4 Pipeline::~Pipeline() [function] [call site] 00078
3 Pl_Discard::~Pl_Discard() [function] [call site] 00079
4 Pipeline::~Pipeline() [function] [call site] 00080
2 __cxa_begin_catch [call site] 00081
2 __cxa_end_catch [call site] 00082
2 __clang_call_terminate [call site] 00083
3 __cxa_begin_catch [call site] 00084