Coverage Report

Created: 2026-06-30 07:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/poppler/cpp/tests/fuzzing/doc_fuzzer.cc
Line
Count
Source
1
#include <cstdint>
2
#include <poppler-document.h>
3
#include <poppler-global.h>
4
#include "fuzzer_init.h"
5
6
#include "FuzzedDataProvider.h"
7
8
const size_t input_size = 32;
9
const size_t count = 6;
10
11
43.2M
static void dummy_error_function(const std::string &, void *) { }
12
13
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
14
7.27k
{
15
7.27k
    initialize_poppler_data_dir();
16
7.27k
    if (size < input_size * count) {
17
0
        return 0;
18
0
    }
19
7.27k
    poppler::set_debug_error_function(dummy_error_function, nullptr);
20
7.27k
    poppler::document *doc = poppler::document::load_from_raw_data((const char *)data, size);
21
7.27k
    if (!doc || doc->is_locked()) {
22
5.64k
        delete doc;
23
5.64k
        return 0;
24
5.64k
    }
25
26
1.62k
    FuzzedDataProvider data_provider(data, size);
27
1.62k
    std::string in_auth = data_provider.ConsumeBytesAsString(input_size);
28
1.62k
    std::string in_creat = data_provider.ConsumeBytesAsString(input_size);
29
1.62k
    std::string in_key = data_provider.ConsumeBytesAsString(input_size);
30
1.62k
    std::string in_prod = data_provider.ConsumeBytesAsString(input_size);
31
1.62k
    std::string in_sub = data_provider.ConsumeBytesAsString(input_size);
32
1.62k
    std::string in_title = data_provider.ConsumeBytesAsString(input_size);
33
34
    // Testing both methods for conversion to ustring
35
1.62k
    doc->set_author(poppler::ustring::from_latin1(in_auth));
36
1.62k
    doc->set_creator(poppler::ustring::from_latin1(in_creat));
37
1.62k
    doc->set_keywords(poppler::ustring::from_latin1(in_key));
38
1.62k
    doc->set_producer(poppler::ustring::from_latin1(in_prod));
39
1.62k
    doc->set_subject(poppler::ustring::from_latin1(in_sub));
40
1.62k
    doc->set_title(poppler::ustring::from_latin1(in_title));
41
42
1.62k
    doc->set_author(poppler::ustring::from_utf8(in_auth.c_str(), -1));
43
1.62k
    doc->set_creator(poppler::ustring::from_utf8(in_creat.c_str(), -1));
44
1.62k
    doc->set_keywords(poppler::ustring::from_utf8(in_key.c_str(), -1));
45
1.62k
    doc->set_producer(poppler::ustring::from_utf8(in_prod.c_str(), -1));
46
1.62k
    doc->set_subject(poppler::ustring::from_utf8(in_sub.c_str(), -1));
47
1.62k
    doc->set_title(poppler::ustring::from_utf8(in_title.c_str(), -1));
48
49
1.62k
    delete doc;
50
1.62k
    return 0;
51
7.27k
}