| Index: fuzz/fuzz.cpp
|
| diff --git a/fuzz/fuzz.cpp b/fuzz/fuzz.cpp
|
| index 6e3179095103916661273bef6fadd4e5c7d6f51c..929ba7a4cf54dd4d7243d968cb7bfc9182ad7c1c 100644
|
| --- a/fuzz/fuzz.cpp
|
| +++ b/fuzz/fuzz.cpp
|
| @@ -6,35 +6,41 @@
|
| */
|
|
|
| #include "Fuzz.h"
|
| -#include "SkCommandLineFlags.h"
|
| -
|
| -DEFINE_string2(match, m, "", "The usual match patterns, applied to name.");
|
| -DEFINE_string2(bytes, b, "", "Path to file containing fuzzed bytes.");
|
|
|
| int main(int argc, char** argv) {
|
| - SkCommandLineFlags::Parse(argc, argv);
|
| - SkAutoTUnref<SkData> bytes;
|
| - if (!FLAGS_bytes.isEmpty()) {
|
| - bytes.reset(SkData::NewFromFileName(FLAGS_bytes[0]));
|
| - }
|
| + ASSERT(argc > 2);
|
| + const char* name = argv[1];
|
| + const char* path = argv[2];
|
| +
|
| + SkAutoTUnref<SkData> bytes(SkData::NewFromFileName(path));
|
| + Fuzz fuzz(bytes);
|
|
|
| for (auto r = SkTRegistry<Fuzzable>::Head(); r; r = r->next()) {
|
| auto fuzzable = r->factory();
|
| - if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, fuzzable.name)) {
|
| - SkDebugf("Running %s...\n", fuzzable.name);
|
| - Fuzz fuzz(bytes);
|
| + if (0 == strcmp(name, fuzzable.name)) {
|
| fuzzable.fn(&fuzz);
|
| + return 0;
|
| }
|
| }
|
| - return 0;
|
| + return 1;
|
| }
|
|
|
|
|
| -Fuzz::Fuzz(SkData* bytes) : fBytes(SkSafeRef(bytes)) {}
|
| +Fuzz::Fuzz(SkData* bytes) : fBytes(SkSafeRef(bytes)), fNextByte(0) {}
|
| +
|
| +template <typename T>
|
| +static T read(const SkData* data, int* next) {
|
| + ASSERT(sizeof(T) <= data->size());
|
| + if (*next + sizeof(T) > data->size()) {
|
| + *next = 0;
|
| + }
|
| + T val;
|
| + memcpy(&val, data->bytes() + *next, sizeof(T));
|
| + *next += sizeof(T);
|
| + return val;
|
| +}
|
|
|
| -// These methods are all TODO(kjlubick).
|
| -uint32_t Fuzz::nextU() { return 0; }
|
| -float Fuzz::nextF() { return 0.0f; }
|
| -uint32_t Fuzz::nextURange(uint32_t min, uint32_t max) { return min; }
|
| -float Fuzz::nextFRange(float min, float max) { return min; }
|
| +uint8_t Fuzz::nextB() { return read<uint8_t >(fBytes, &fNextByte); }
|
| +uint32_t Fuzz::nextU() { return read<uint32_t>(fBytes, &fNextByte); }
|
| +float Fuzz::nextF() { return read<float >(fBytes, &fNextByte); }
|
|
|
|
|