From 793d987b5fdd55330f2c0df532114c0ce13a25af Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Fri, 21 Jun 2019 17:39:19 -0400 Subject: [PATCH] Update qpdf_fuzzer to increase coverage --- fuzz/qpdf_fuzzer.cc | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/fuzz/qpdf_fuzzer.cc b/fuzz/qpdf_fuzzer.cc index 3fb33109..ac591637 100644 --- a/fuzz/qpdf_fuzzer.cc +++ b/fuzz/qpdf_fuzzer.cc @@ -58,9 +58,7 @@ FuzzHelper::getWriter(PointerHolder qpdf) { PointerHolder w = new QPDFWriter(*qpdf); w->setOutputPipeline(&this->discard); - w->setDeterministicID(true); w->setDecodeLevel(qpdf_dl_all); - w->setCompressStreams(false); return w; } @@ -75,6 +73,10 @@ FuzzHelper::doWrite(PointerHolder w) { std::cerr << e.what() << std::endl; } + catch (std::runtime_error const& e) + { + std::cerr << e.what() << std::endl; + } } void @@ -87,21 +89,31 @@ FuzzHelper::testWrite() q = getQpdf(); w = getWriter(q); + w->setDeterministicID(true); + w->setQDFMode(true); doWrite(w); q = getQpdf(); w = getWriter(q); + w->setStaticID(true); w->setLinearization(true); + w->setR6EncryptionParameters( + "u", "o", true, true, true, true, true, true, qpdf_r3p_full, true); doWrite(w); q = getQpdf(); w = getWriter(q); + w->setStaticID(true); w->setObjectStreamMode(qpdf_o_disable); + w->setR3EncryptionParameters( + "u", "o", true, true, qpdf_r3p_full, qpdf_r3m_all); doWrite(w); q = getQpdf(); w = getWriter(q); + w->setDeterministicID(true); w->setObjectStreamMode(qpdf_o_generate); + w->setLinearization(true); doWrite(w); } @@ -115,6 +127,8 @@ FuzzHelper::testPages() QPDFPageLabelDocumentHelper pldh(*q); QPDFOutlineDocumentHelper odh(*q); QPDFAcroFormDocumentHelper afdh(*q); + afdh.generateAppearancesIfNeeded(); + pdh.flattenAnnotations(); std::vector pages = pdh.getAllPages(); DiscardContents discard_contents; int pageno = 0; @@ -126,10 +140,13 @@ FuzzHelper::testPages() ++pageno; try { + page.coalesceContentStreams(); page.parsePageContents(&discard_contents); page.getPageImages(); 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 annotations = afdh.getWidgetAnnotationsForPage(page);