Coverage Report

Created: 2026-06-16 06:41

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
273k
        data(data),
13
273k
        size(size)
14
273k
    {
15
273k
    }
16
17
    void
18
    run()
19
179k
    {
20
179k
        qpdf::global::options::fuzz_mode(true);
21
22
179k
        Pl_Discard discard;
23
179k
        Pl_DCT p("decode", &discard);
24
179k
        try {
25
179k
            p.write(data, size);
26
179k
            p.finish();
27
179k
        } catch (std::runtime_error const& e) {
28
117k
            std::cerr << "runtime_error: " << e.what() << '\n';
29
117k
        }
30
179k
    }
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
273k
{
40
273k
#ifndef _WIN32
41
    // Used by jpeg library to work around false positives in memory
42
    // sanitizer.
43
273k
    setenv("JSIMD_FORCENONE", "1", 1);
44
273k
#endif
45
273k
    FuzzHelper f(data, size);
46
273k
    f.run();
47
273k
    return 0;
48
273k
}