2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-28 07:53:11 +00:00

Update qpdf_fuzzer to increase coverage

This commit is contained in:
Jay Berkenbilt 2019-06-21 17:39:19 -04:00
parent b07ad6794e
commit 793d987b5f

View File

@ -58,9 +58,7 @@ FuzzHelper::getWriter(PointerHolder<QPDF> qpdf)
{ {
PointerHolder<QPDFWriter> w = new QPDFWriter(*qpdf); PointerHolder<QPDFWriter> w = new QPDFWriter(*qpdf);
w->setOutputPipeline(&this->discard); w->setOutputPipeline(&this->discard);
w->setDeterministicID(true);
w->setDecodeLevel(qpdf_dl_all); w->setDecodeLevel(qpdf_dl_all);
w->setCompressStreams(false);
return w; return w;
} }
@ -75,6 +73,10 @@ FuzzHelper::doWrite(PointerHolder<QPDFWriter> w)
{ {
std::cerr << e.what() << std::endl; std::cerr << e.what() << std::endl;
} }
catch (std::runtime_error const& e)
{
std::cerr << e.what() << std::endl;
}
} }
void void
@ -87,21 +89,31 @@ FuzzHelper::testWrite()
q = getQpdf(); q = getQpdf();
w = getWriter(q); w = getWriter(q);
w->setDeterministicID(true);
w->setQDFMode(true);
doWrite(w); doWrite(w);
q = getQpdf(); q = getQpdf();
w = getWriter(q); w = getWriter(q);
w->setStaticID(true);
w->setLinearization(true); w->setLinearization(true);
w->setR6EncryptionParameters(
"u", "o", true, true, true, true, true, true, qpdf_r3p_full, true);
doWrite(w); doWrite(w);
q = getQpdf(); q = getQpdf();
w = getWriter(q); w = getWriter(q);
w->setStaticID(true);
w->setObjectStreamMode(qpdf_o_disable); w->setObjectStreamMode(qpdf_o_disable);
w->setR3EncryptionParameters(
"u", "o", true, true, qpdf_r3p_full, qpdf_r3m_all);
doWrite(w); doWrite(w);
q = getQpdf(); q = getQpdf();
w = getWriter(q); w = getWriter(q);
w->setDeterministicID(true);
w->setObjectStreamMode(qpdf_o_generate); w->setObjectStreamMode(qpdf_o_generate);
w->setLinearization(true);
doWrite(w); doWrite(w);
} }
@ -115,6 +127,8 @@ FuzzHelper::testPages()
QPDFPageLabelDocumentHelper pldh(*q); QPDFPageLabelDocumentHelper pldh(*q);
QPDFOutlineDocumentHelper odh(*q); QPDFOutlineDocumentHelper odh(*q);
QPDFAcroFormDocumentHelper afdh(*q); QPDFAcroFormDocumentHelper afdh(*q);
afdh.generateAppearancesIfNeeded();
pdh.flattenAnnotations();
std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages(); std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
DiscardContents discard_contents; DiscardContents discard_contents;
int pageno = 0; int pageno = 0;
@ -126,10 +140,13 @@ FuzzHelper::testPages()
++pageno; ++pageno;
try try
{ {
page.coalesceContentStreams();
page.parsePageContents(&discard_contents); page.parsePageContents(&discard_contents);
page.getPageImages(); page.getPageImages();
pldh.getLabelForPage(pageno); pldh.getLabelForPage(pageno);
odh.getOutlinesForPage(page.getObjectHandle().getObjGen()); QPDFObjectHandle page_obj(page.getObjectHandle());
page_obj.getJSON(true).unparse();
odh.getOutlinesForPage(page_obj.getObjGen());
std::vector<QPDFAnnotationObjectHelper> annotations = std::vector<QPDFAnnotationObjectHelper> annotations =
afdh.getWidgetAnnotationsForPage(page); afdh.getWidgetAnnotationsForPage(page);