Coverage Report

Created: 2026-05-30 06:17

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/qpdf/fuzz/tiffpredictor_fuzzer.cc
Line
Count
Source
1
#include <qpdf/Pl_Discard.hh>
2
#include <qpdf/Pl_TIFFPredictor.hh>
3
#include <iostream>
4
#include <stdexcept>
5
6
class FuzzHelper
7
{
8
  public:
9
    FuzzHelper(unsigned char const* data, size_t size) :
10
274k
        data(data),
11
274k
        size(size)
12
274k
    {
13
274k
    }
14
15
    void
16
    run()
17
180k
    {
18
180k
        Pl_Discard discard;
19
180k
        Pl_TIFFPredictor p("decoder", &discard, Pl_TIFFPredictor::a_decode, 16, 1, 8);
20
        // Exercise with strange values for some of the parameters.
21
180k
        Pl_TIFFPredictor p2("decoder", &discard, Pl_TIFFPredictor::a_decode, 16, 2, 5);
22
180k
        try {
23
180k
            p.write(data, size);
24
180k
            p.finish();
25
180k
            p2.write(data, size);
26
180k
            p2.finish();
27
180k
        } catch (std::runtime_error const& e) {
28
118k
            std::cerr << "runtime_error: " << e.what() << '\n';
29
118k
        }
30
180k
    }
31
32
  private:
33
    unsigned char const* data;
34
    size_t size;
35
};
36
37
extern "C" int
38
LLVMFuzzerTestOneInput(unsigned char const* data, size_t size)
39
274k
{
40
274k
    FuzzHelper f(data, size);
41
274k
    f.run();
42
274k
    return 0;
43
274k
}