#include #include #include static void dummy_error_function(const QString &, const QVariant &) { } extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { Poppler::setDebugErrorFunction(dummy_error_function, QVariant()); const QFont font(QStringLiteral("Helvetica"), 20); const QColor color = QColor::fromRgb(0xAB, 0xCD, 0xEF); QByteArray in_data = QByteArray::fromRawData((const char *)data, size); Poppler::Document *doc = Poppler::Document::loadFromData(in_data); if (!doc || doc->isLocked()) { delete doc; return 0; } for (int i = 0; i < doc->numPages(); i++) { Poppler::Page *p = doc->page(i); if (!p) { continue; } Poppler::TextAnnotation *ann = new Poppler::TextAnnotation(Poppler::TextAnnotation::InPlace); ann->setTextFont(font); ann->setTextColor(color); ann->setBoundary(QRectF(0.1, 0.1, 0.2, 0.2)); ann->setContents(QString(in_data)); p->addAnnotation(ann); QBuffer buffer; buffer.open(QIODevice::WriteOnly); std::unique_ptr conv(doc->pdfConverter()); conv->setOutputDevice(&buffer); conv->setPDFOptions(Poppler::PDFConverter::WithChanges); conv->convert(); buffer.close(); delete ann; delete p; } delete doc; return 0; }