Commit 793d987b5fdd55330f2c0df532114c0ce13a25af
1 parent
b07ad679
Update qpdf_fuzzer to increase coverage
Showing
1 changed file
with
20 additions
and
3 deletions
fuzz/qpdf_fuzzer.cc
| @@ -58,9 +58,7 @@ FuzzHelper::getWriter(PointerHolder<QPDF> qpdf) | @@ -58,9 +58,7 @@ FuzzHelper::getWriter(PointerHolder<QPDF> qpdf) | ||
| 58 | { | 58 | { |
| 59 | PointerHolder<QPDFWriter> w = new QPDFWriter(*qpdf); | 59 | PointerHolder<QPDFWriter> w = new QPDFWriter(*qpdf); |
| 60 | w->setOutputPipeline(&this->discard); | 60 | w->setOutputPipeline(&this->discard); |
| 61 | - w->setDeterministicID(true); | ||
| 62 | w->setDecodeLevel(qpdf_dl_all); | 61 | w->setDecodeLevel(qpdf_dl_all); |
| 63 | - w->setCompressStreams(false); | ||
| 64 | return w; | 62 | return w; |
| 65 | } | 63 | } |
| 66 | 64 | ||
| @@ -75,6 +73,10 @@ FuzzHelper::doWrite(PointerHolder<QPDFWriter> w) | @@ -75,6 +73,10 @@ FuzzHelper::doWrite(PointerHolder<QPDFWriter> w) | ||
| 75 | { | 73 | { |
| 76 | std::cerr << e.what() << std::endl; | 74 | std::cerr << e.what() << std::endl; |
| 77 | } | 75 | } |
| 76 | + catch (std::runtime_error const& e) | ||
| 77 | + { | ||
| 78 | + std::cerr << e.what() << std::endl; | ||
| 79 | + } | ||
| 78 | } | 80 | } |
| 79 | 81 | ||
| 80 | void | 82 | void |
| @@ -87,21 +89,31 @@ FuzzHelper::testWrite() | @@ -87,21 +89,31 @@ FuzzHelper::testWrite() | ||
| 87 | 89 | ||
| 88 | q = getQpdf(); | 90 | q = getQpdf(); |
| 89 | w = getWriter(q); | 91 | w = getWriter(q); |
| 92 | + w->setDeterministicID(true); | ||
| 93 | + w->setQDFMode(true); | ||
| 90 | doWrite(w); | 94 | doWrite(w); |
| 91 | 95 | ||
| 92 | q = getQpdf(); | 96 | q = getQpdf(); |
| 93 | w = getWriter(q); | 97 | w = getWriter(q); |
| 98 | + w->setStaticID(true); | ||
| 94 | w->setLinearization(true); | 99 | w->setLinearization(true); |
| 100 | + w->setR6EncryptionParameters( | ||
| 101 | + "u", "o", true, true, true, true, true, true, qpdf_r3p_full, true); | ||
| 95 | doWrite(w); | 102 | doWrite(w); |
| 96 | 103 | ||
| 97 | q = getQpdf(); | 104 | q = getQpdf(); |
| 98 | w = getWriter(q); | 105 | w = getWriter(q); |
| 106 | + w->setStaticID(true); | ||
| 99 | w->setObjectStreamMode(qpdf_o_disable); | 107 | w->setObjectStreamMode(qpdf_o_disable); |
| 108 | + w->setR3EncryptionParameters( | ||
| 109 | + "u", "o", true, true, qpdf_r3p_full, qpdf_r3m_all); | ||
| 100 | doWrite(w); | 110 | doWrite(w); |
| 101 | 111 | ||
| 102 | q = getQpdf(); | 112 | q = getQpdf(); |
| 103 | w = getWriter(q); | 113 | w = getWriter(q); |
| 114 | + w->setDeterministicID(true); | ||
| 104 | w->setObjectStreamMode(qpdf_o_generate); | 115 | w->setObjectStreamMode(qpdf_o_generate); |
| 116 | + w->setLinearization(true); | ||
| 105 | doWrite(w); | 117 | doWrite(w); |
| 106 | } | 118 | } |
| 107 | 119 | ||
| @@ -115,6 +127,8 @@ FuzzHelper::testPages() | @@ -115,6 +127,8 @@ FuzzHelper::testPages() | ||
| 115 | QPDFPageLabelDocumentHelper pldh(*q); | 127 | QPDFPageLabelDocumentHelper pldh(*q); |
| 116 | QPDFOutlineDocumentHelper odh(*q); | 128 | QPDFOutlineDocumentHelper odh(*q); |
| 117 | QPDFAcroFormDocumentHelper afdh(*q); | 129 | QPDFAcroFormDocumentHelper afdh(*q); |
| 130 | + afdh.generateAppearancesIfNeeded(); | ||
| 131 | + pdh.flattenAnnotations(); | ||
| 118 | std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages(); | 132 | std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages(); |
| 119 | DiscardContents discard_contents; | 133 | DiscardContents discard_contents; |
| 120 | int pageno = 0; | 134 | int pageno = 0; |
| @@ -126,10 +140,13 @@ FuzzHelper::testPages() | @@ -126,10 +140,13 @@ FuzzHelper::testPages() | ||
| 126 | ++pageno; | 140 | ++pageno; |
| 127 | try | 141 | try |
| 128 | { | 142 | { |
| 143 | + page.coalesceContentStreams(); | ||
| 129 | page.parsePageContents(&discard_contents); | 144 | page.parsePageContents(&discard_contents); |
| 130 | page.getPageImages(); | 145 | page.getPageImages(); |
| 131 | pldh.getLabelForPage(pageno); | 146 | pldh.getLabelForPage(pageno); |
| 132 | - odh.getOutlinesForPage(page.getObjectHandle().getObjGen()); | 147 | + QPDFObjectHandle page_obj(page.getObjectHandle()); |
| 148 | + page_obj.getJSON(true).unparse(); | ||
| 149 | + odh.getOutlinesForPage(page_obj.getObjGen()); | ||
| 133 | 150 | ||
| 134 | std::vector<QPDFAnnotationObjectHelper> annotations = | 151 | std::vector<QPDFAnnotationObjectHelper> annotations = |
| 135 | afdh.getWidgetAnnotationsForPage(page); | 152 | afdh.getWidgetAnnotationsForPage(page); |