/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 | 19.1M | { |
9 | 19.1M | Q_UNUSED(message) |
10 | 19.1M | Q_UNUSED(closure) |
11 | 19.1M | } |
12 | | |
13 | | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) |
14 | 6.32k | { |
15 | 6.32k | Poppler::setDebugErrorFunction(dummy_error_function, QVariant()); |
16 | 6.32k | QByteArray in_data = QByteArray::fromRawData((const char *)data, size); |
17 | 6.32k | std::unique_ptr<Poppler::Document> doc = Poppler::Document::loadFromData(in_data); |
18 | 6.32k | if (!doc || doc->isLocked()) { |
19 | 352 | return 0; |
20 | 352 | } |
21 | | |
22 | 53.2k | for (int i = 0; i < doc->numPages(); i++) { |
23 | 47.2k | std::unique_ptr<Poppler::Page> p = doc->page(i); |
24 | 47.2k | if (!p) { |
25 | 38.2k | continue; |
26 | 38.2k | } |
27 | 8.99k | QImage image = p->renderToImage(72.0, 72.0, -1, -1, -1, -1, Poppler::Page::Rotate0); |
28 | 8.99k | } |
29 | | |
30 | 5.97k | const std::vector<std::unique_ptr<Poppler::FormFieldSignature>> signatures = doc->signatures(); |
31 | 5.97k | for (const std::unique_ptr<Poppler::FormFieldSignature> &signature : signatures) { |
32 | 5 | const Poppler::SignatureValidationInfo svi = signature->validateAsync(Poppler::FormFieldSignature::ValidateVerifyCertificate).first; |
33 | 5 | signature->validateResult(); |
34 | 5 | } |
35 | | |
36 | 5.97k | doc->outline(); |
37 | | |
38 | 5.97k | if (doc->numPages() > 0) { |
39 | 5.85k | QList<int> pageList; |
40 | 53.1k | for (int i = 0; i < doc->numPages(); i++) { |
41 | 47.2k | pageList << (i + 1); |
42 | 47.2k | } |
43 | | |
44 | 5.85k | std::unique_ptr<Poppler::PSConverter> psConverter = doc->psConverter(); |
45 | | |
46 | 5.85k | QBuffer buffer; |
47 | 5.85k | buffer.open(QIODevice::WriteOnly); |
48 | 5.85k | psConverter->setOutputDevice(&buffer); |
49 | | |
50 | 5.85k | psConverter->setPageList(pageList); |
51 | 5.85k | psConverter->setPaperWidth(595); |
52 | 5.85k | psConverter->setPaperHeight(842); |
53 | 5.85k | psConverter->setTitle(doc->info(QStringLiteral("Title"))); |
54 | 5.85k | psConverter->convert(); |
55 | 5.85k | } |
56 | | |
57 | 5.97k | return 0; |
58 | 6.32k | } |