/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 | } |