/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef Fuzz_DEFINED #define Fuzz_DEFINED #include "SkData.h" #include "SkTRegistry.h" #include "SkTypes.h" class Fuzz : SkNoncopyable { public: explicit Fuzz(SkData*); bool nextBool(); uint8_t nextB(); uint32_t nextU(); // This can be nan, +- infinity, 0, anything. float nextF(); // Return the next fuzzed value [min, max) as an unsigned 32bit integer. uint32_t nextRangeU(uint32_t min, uint32_t max); /** * Returns next fuzzed value [min...max) as a float. * Will not be Infinity or NaN. */ float nextRangeF(float min, float max); void signalBug (); // Tell afl-fuzz these inputs found a bug. void signalBoring(); // Tell afl-fuzz these inputs are not worth testing. private: template T nextT(); SkAutoTUnref fBytes; int fNextByte; }; struct Fuzzable { const char* name; void (*fn)(Fuzz*); }; #define DEF_FUZZ(name, f) \ static void fuzz_##name(Fuzz*); \ SkTRegistry register_##name({#name, fuzz_##name}); \ static void fuzz_##name(Fuzz* f) #endif//Fuzz_DEFINED