Commit 793d987b5fdd55330f2c0df532114c0ce13a25af

Authored by Jay Berkenbilt
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&lt;QPDFWriter&gt; w) @@ -75,6 +73,10 @@ FuzzHelper::doWrite(PointerHolder&lt;QPDFWriter&gt; 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);