Coverage Report

Created: 2026-08-13 07:14

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/qpdf/fuzz/dct_fuzzer.cc
Line
Count
Source
1
#include <qpdf/Pl_DCT.hh>
2
#include <qpdf/Pl_Discard.hh>
3
#include <qpdf/global.hh>
4
5
#include <iostream>
6
#include <stdexcept>
7
8
class FuzzHelper
9
{
10
  public:
11
    FuzzHelper(unsigned char const* data, size_t size) :
12
326k
        data(data),
13
326k
        size(size)
14
326k
    {
15
326k
    }
16
17
    void
18
    run()
19
218k
    {
20
218k
        qpdf::global::options::fuzz_mode(true);
21
22
218k
        Pl_Discard discard;
23
218k
        Pl_DCT p("decode", &discard);
24
218k
        try {
25
218k
            p.write(data, size);
26
218k
            p.finish();
27
218k
        } catch (std::runtime_error const& e) {
28
144k
            std::cerr << "runtime_error: " << e.what() << '\n';
29
144k
        }
30
218k
    }
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
326k
{
40
326k
#ifndef _WIN32
41
    // Used by jpeg library to work around false positives in memory
42
    // sanitizer.
43
326k
    setenv("JSIMD_FORCENONE", "1", 1);
44
326k
#endif
45
326k
    FuzzHelper f(data, size);
46
326k
    f.run();
47
326k
    return 0;
48
326k
}