Coverage Report

Created: 2026-03-31 07:41

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/poppler/cpp/tests/fuzzing/page_search_fuzzer.cc
Line
Count
Source
1
#include <cstdint>
2
#include <poppler-document.h>
3
#include <poppler-global.h>
4
#include "fuzzer_init.h"
5
#include <poppler-page.h>
6
#include <poppler-page-renderer.h>
7
8
#include "FuzzedDataProvider.h"
9
10
const size_t input_size = 32;
11
12
30.2M
static void dummy_error_function(const std::string &, void *) { }
13
14
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
15
16.7k
{
16
16.7k
    initialize_poppler_data_dir();
17
16.7k
    if (size < input_size) {
18
0
        return 0;
19
0
    }
20
16.7k
    poppler::set_debug_error_function(dummy_error_function, nullptr);
21
22
16.7k
    poppler::document *doc = poppler::document::load_from_raw_data((const char *)data, size);
23
16.7k
    if (!doc || doc->is_locked()) {
24
2.29k
        delete doc;
25
2.29k
        return 0;
26
2.29k
    }
27
28
14.4k
    poppler::page_renderer r;
29
14.4k
    FuzzedDataProvider data_provider(data, size);
30
14.4k
    std::string in_text = data_provider.ConsumeBytesAsString(input_size);
31
140k
    for (int i = 0; i < doc->pages(); i++) {
32
125k
        poppler::page *p = doc->create_page(i);
33
125k
        if (!p) {
34
81.5k
            continue;
35
81.5k
        }
36
44.3k
        poppler::rectf rect = p->page_rect();
37
44.3k
        poppler::ustring text = poppler::ustring::from_utf8(in_text.c_str(), -1);
38
44.3k
        p->search(text, rect, poppler::page::search_from_top, poppler::case_insensitive, poppler::rotate_0);
39
44.3k
        r.render_page(p);
40
44.3k
        delete p;
41
44.3k
    }
42
43
14.4k
    delete doc;
44
14.4k
    return 0;
45
16.7k
}