aboutsummaryrefslogtreecommitdiffstats
path: root/fuzz/flate_fuzzer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'fuzz/flate_fuzzer.cc')
-rw-r--r--fuzz/flate_fuzzer.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/fuzz/flate_fuzzer.cc b/fuzz/flate_fuzzer.cc
new file mode 100644
index 00000000..700f7cd7
--- /dev/null
+++ b/fuzz/flate_fuzzer.cc
@@ -0,0 +1,52 @@
+#include <qpdf/Pl_Discard.hh>
+#include <qpdf/Pl_Flate.hh>
+#include <iostream>
+#include <stdexcept>
+
+class FuzzHelper
+{
+ public:
+ FuzzHelper(unsigned char const* data, size_t size);
+ void run();
+
+ private:
+ void doChecks();
+
+ unsigned char const* data;
+ size_t size;
+};
+
+FuzzHelper::FuzzHelper(unsigned char const* data, size_t size) :
+ data(data),
+ size(size)
+{
+}
+
+void
+FuzzHelper::doChecks()
+{
+ Pl_Discard discard;
+ Pl_Flate p("decode", &discard, Pl_Flate::a_deflate);
+ p.write(const_cast<unsigned char*>(data), size);
+ p.finish();
+}
+
+void
+FuzzHelper::run()
+{
+ try
+ {
+ doChecks();
+ }
+ catch (std::runtime_error const& e)
+ {
+ std::cerr << "runtime_error: " << e.what() << std::endl;
+ }
+}
+
+extern "C" int LLVMFuzzerTestOneInput(unsigned char const* data, size_t size)
+{
+ FuzzHelper f(data, size);
+ f.run();
+ return 0;
+}