/src/poppler/qt6/tests/fuzzing/qt_pdf_fuzzer.cc
Line | Count | Source |
1 | | #include <cstdint> |
2 | | #include <poppler-qt6.h> |
3 | | #include <poppler-form.h> |
4 | | #include <QtCore/QBuffer> |
5 | | #include <QtGui/QImage> |
6 | | |
7 | | static void dummy_error_function(const QString &message, const QVariant &closure) |
8 | 20.9M | { |
9 | 20.9M | Q_UNUSED(message) |
10 | 20.9M | Q_UNUSED(closure) |
11 | 20.9M | } |
12 | | |
13 | | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) |
14 | 6.98k | { |
15 | 6.98k | Poppler::setDebugErrorFunction(dummy_error_function, QVariant()); |
16 | 6.98k | QByteArray in_data = QByteArray::fromRawData((const char *)data, size); |
17 | 6.98k | std::unique_ptr<Poppler::Document> doc = Poppler::Document::loadFromData(in_data); |
18 | 6.98k | if (!doc || doc->isLocked()) { |
19 | 328 | return 0; |
20 | 328 | } |
21 | | |
22 | 56.2k | for (int i = 0; i < doc->numPages(); i++) { |
23 | 49.6k | std::unique_ptr<Poppler::Page> p = doc->page(i); |
24 | 49.6k | if (!p) { |
25 | 39.7k | continue; |
26 | 39.7k | } |
27 | 9.82k | QImage image = p->renderToImage(72.0, 72.0, -1, -1, -1, -1, Poppler::Page::Rotate0); |
28 | 9.82k | } |
29 | | |
30 | 6.66k | const std::vector<std::unique_ptr<Poppler::FormFieldSignature>> signatures = doc->signatures(); |
31 | 6.66k | for (const std::unique_ptr<Poppler::FormFieldSignature> &signature : signatures) { |
32 | 6 | const Poppler::SignatureValidationInfo svi = signature->validateAsync(Poppler::FormFieldSignature::ValidateVerifyCertificate).first; |
33 | 6 | signature->validateResult(); |
34 | 6 | } |
35 | | |
36 | 6.66k | doc->outline(); |
37 | | |
38 | 6.66k | if (doc->numPages() > 0) { |
39 | 6.52k | QList<int> pageList; |
40 | 56.1k | for (int i = 0; i < doc->numPages(); i++) { |
41 | 49.6k | pageList << (i + 1); |
42 | 49.6k | } |
43 | | |
44 | 6.52k | std::unique_ptr<Poppler::PSConverter> psConverter = doc->psConverter(); |
45 | | |
46 | 6.52k | QBuffer buffer; |
47 | 6.52k | buffer.open(QIODevice::WriteOnly); |
48 | 6.52k | psConverter->setOutputDevice(&buffer); |
49 | | |
50 | 6.52k | psConverter->setPageList(pageList); |
51 | 6.52k | psConverter->setPaperWidth(595); |
52 | 6.52k | psConverter->setPaperHeight(842); |
53 | 6.52k | psConverter->setTitle(doc->info(QStringLiteral("Title"))); |
54 | 6.52k | psConverter->convert(); |
55 | 6.52k | } |
56 | | |
57 | 6.66k | return 0; |
58 | 6.98k | } |