Coverage Report

Created: 2025-11-16 07:45

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 <poppler-page.h>
5
#include <poppler-page-renderer.h>
6
7
#include "FuzzedDataProvider.h"
8
9
const size_t input_size = 32;
10
11
32.9M
static void dummy_error_function(const std::string &, void *) { }
12
13
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
14
16.3k
{
15
16.3k
    if (size < input_size) {
16
0
        return 0;
17
0
    }
18
16.3k
    poppler::set_debug_error_function(dummy_error_function, nullptr);
19
20
16.3k
    poppler::document *doc = poppler::document::load_from_raw_data((const char *)data, size);
21
16.3k
    if (!doc || doc->is_locked()) {
22
2.60k
        delete doc;
23
2.60k
        return 0;
24
2.60k
    }
25
26
13.7k
    poppler::page_renderer r;
27
13.7k
    FuzzedDataProvider data_provider(data, size);
28
13.7k
    std::string in_text = data_provider.ConsumeBytesAsString(input_size);
29
135k
    for (int i = 0; i < doc->pages(); i++) {
30
121k
        poppler::page *p = doc->create_page(i);
31
121k
        if (!p) {
32
74.7k
            continue;
33
74.7k
        }
34
47.1k
        poppler::rectf rect = p->page_rect();
35
47.1k
        poppler::ustring text = poppler::ustring::from_utf8(in_text.c_str(), -1);
36
47.1k
        p->search(text, rect, poppler::page::search_from_top, poppler::case_insensitive, poppler::rotate_0);
37
47.1k
        r.render_page(p);
38
47.1k
        delete p;
39
47.1k
    }
40
41
13.7k
    delete doc;
42
13.7k
    return 0;
43
16.3k
}