Break puffin_fuzzer into three fuzzers am: ba2b2a9c0c am: 27423c2cdb
am: 5bf39c93ae
Change-Id: I987203098187d13bec6bf746de62532637894553
diff --git a/BUILD.gn b/BUILD.gn
index 24d9c06..3157419 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -16,7 +16,11 @@
deps += [ ":puffin_test" ]
}
if (use.fuzzer) {
- deps += [ ":puffin_fuzzer" ]
+ deps += [
+ ":puffin_huff_fuzzer",
+ ":puffin_puff_fuzzer",
+ ":puffin_puffpatch_fuzzer",
+ ]
}
}
@@ -138,7 +142,33 @@
}
if (use.fuzzer) {
- executable("puffin_fuzzer") {
+ executable("puffin_huff_fuzzer") {
+ configs += [
+ "//common-mk/common_fuzzer",
+ ":libbrillo",
+ ":target_defaults",
+ ]
+ deps = [
+ ":libpuffpatch",
+ ]
+ sources = [
+ "src/fuzzer_huff.cc",
+ ]
+ }
+ executable("puffin_puff_fuzzer") {
+ configs += [
+ "//common-mk/common_fuzzer",
+ ":libbrillo",
+ ":target_defaults",
+ ]
+ deps = [
+ ":libpuffpatch",
+ ]
+ sources = [
+ "src/fuzzer_puff.cc",
+ ]
+ }
+ executable("puffin_puffpatch_fuzzer") {
configs += [
"//common-mk/common_fuzzer",
":libbrillo",
@@ -148,7 +178,7 @@
":libpuffdiff",
]
sources = [
- "src/fuzzer.cc",
+ "src/fuzzer_puffpatch.cc",
]
}
}
diff --git a/src/fuzzer_huff.cc b/src/fuzzer_huff.cc
new file mode 100644
index 0000000..4002aa0
--- /dev/null
+++ b/src/fuzzer_huff.cc
@@ -0,0 +1,43 @@
+// Copyright 2019 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/logging.h"
+#include "brillo/test_helpers.h"
+
+#include "puffin/src/bit_writer.h"
+#include "puffin/src/include/puffin/common.h"
+#include "puffin/src/include/puffin/huffer.h"
+#include "puffin/src/puff_reader.h"
+
+using puffin::Buffer;
+using puffin::BufferBitWriter;
+using puffin::BufferPuffReader;
+using puffin::ByteExtent;
+using puffin::Huffer;
+
+namespace {
+void FuzzHuff(const uint8_t* data, size_t size) {
+ BufferPuffReader puff_reader(data, size);
+ Buffer deflate_buffer(size);
+ BufferBitWriter bit_writer(deflate_buffer.data(), deflate_buffer.size());
+ Huffer huffer;
+ huffer.HuffDeflate(&puff_reader, &bit_writer);
+}
+
+class Environment {
+ public:
+ Environment() {
+ // To turn off the logging.
+ logging::SetMinLogLevel(logging::LOG_FATAL);
+ }
+};
+
+} // namespace
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ static Environment env;
+
+ FuzzHuff(data, size);
+ return 0;
+}
diff --git a/src/fuzzer_puff.cc b/src/fuzzer_puff.cc
new file mode 100644
index 0000000..c4d26f6
--- /dev/null
+++ b/src/fuzzer_puff.cc
@@ -0,0 +1,47 @@
+// Copyright 2019 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <vector>
+
+#include "base/logging.h"
+#include "brillo/test_helpers.h"
+
+#include "puffin/src/bit_reader.h"
+#include "puffin/src/include/puffin/common.h"
+#include "puffin/src/include/puffin/puffer.h"
+#include "puffin/src/puff_writer.h"
+
+using puffin::BitExtent;
+using puffin::Buffer;
+using puffin::BufferBitReader;
+using puffin::BufferPuffWriter;
+using puffin::Puffer;
+using std::vector;
+
+namespace {
+void FuzzPuff(const uint8_t* data, size_t size) {
+ BufferBitReader bit_reader(data, size);
+ Buffer puff_buffer(size * 2);
+ BufferPuffWriter puff_writer(puff_buffer.data(), puff_buffer.size());
+ vector<BitExtent> bit_extents;
+ Puffer puffer;
+ puffer.PuffDeflate(&bit_reader, &puff_writer, &bit_extents);
+}
+
+class Environment {
+ public:
+ Environment() {
+ // To turn off the logging.
+ logging::SetMinLogLevel(logging::LOG_FATAL);
+ }
+};
+
+} // namespace
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ static Environment env;
+
+ FuzzPuff(data, size);
+ return 0;
+}
diff --git a/src/fuzzer.cc b/src/fuzzer_puffpatch.cc
similarity index 73%
rename from src/fuzzer.cc
rename to src/fuzzer_puffpatch.cc
index b870ac4..28ee5bc 100644
--- a/src/fuzzer.cc
+++ b/src/fuzzer_puffpatch.cc
@@ -7,27 +7,14 @@
#include "base/logging.h"
#include "brillo/test_helpers.h"
-#include "puffin/src/bit_reader.h"
-#include "puffin/src/bit_writer.h"
#include "puffin/src/include/puffin/common.h"
-#include "puffin/src/include/puffin/huffer.h"
-#include "puffin/src/include/puffin/puffer.h"
#include "puffin/src/include/puffin/puffpatch.h"
#include "puffin/src/memory_stream.h"
-#include "puffin/src/puff_reader.h"
-#include "puffin/src/puff_writer.h"
using puffin::BitExtent;
using puffin::Buffer;
-using puffin::BufferBitReader;
-using puffin::BufferBitWriter;
-using puffin::BufferPuffReader;
-using puffin::BufferPuffWriter;
using puffin::ByteExtent;
-using puffin::Huffer;
using puffin::MemoryStream;
-using puffin::Puffer;
-using puffin::UniqueStreamPtr;
using std::vector;
namespace puffin {
@@ -45,23 +32,6 @@
} // namespace puffin
namespace {
-void FuzzPuff(const uint8_t* data, size_t size) {
- BufferBitReader bit_reader(data, size);
- Buffer puff_buffer(size * 2);
- BufferPuffWriter puff_writer(puff_buffer.data(), puff_buffer.size());
- vector<BitExtent> bit_extents;
- Puffer puffer;
- puffer.PuffDeflate(&bit_reader, &puff_writer, &bit_extents);
-}
-
-void FuzzHuff(const uint8_t* data, size_t size) {
- BufferPuffReader puff_reader(data, size);
- Buffer deflate_buffer(size);
- BufferBitWriter bit_writer(deflate_buffer.data(), deflate_buffer.size());
- Huffer huffer;
- huffer.HuffDeflate(&puff_reader, &bit_writer);
-}
-
template <typename T>
bool TestExtentsArrayForFuzzer(const vector<T>& extents) {
const size_t kMaxArraySize = 100;
@@ -114,7 +84,8 @@
}
}
-struct Environment {
+class Environment {
+ public:
Environment() {
// To turn off the logging.
logging::SetMinLogLevel(logging::LOG_FATAL);
@@ -123,13 +94,12 @@
std::cerr.setstate(std::ios_base::failbit);
}
};
-Environment* env = new Environment();
} // namespace
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
- FuzzPuff(data, size);
- FuzzHuff(data, size);
+ static Environment env;
+
FuzzPuffPatch(data, size);
return 0;
}