From 91390c8acea911d747548e24031888a9c63650fe Mon Sep 17 00:00:00 2001 From: Cary Clark Date: Fri, 9 Mar 2018 14:02:46 -0500 Subject: pathmeasure fuzzer R=kjlubick@google.com, reed@google.com Bug: skia: Change-Id: I16a8b09312e5d1d1783bd6a4b791636ad8f63889 Reviewed-on: https://skia-review.googlesource.com/113165 Reviewed-by: Mike Reed Reviewed-by: Kevin Lubick Commit-Queue: Cary Clark --- fuzz/FuzzCommon.h | 60 ++++++++++--------------------------------------------- 1 file changed, 11 insertions(+), 49 deletions(-) (limited to 'fuzz/FuzzCommon.h') diff --git a/fuzz/FuzzCommon.h b/fuzz/FuzzCommon.h index c908606be1..bea5a30f86 100644 --- a/fuzz/FuzzCommon.h +++ b/fuzz/FuzzCommon.h @@ -5,12 +5,15 @@ * found in the LICENSE file. */ +#ifndef FuzzCommon_DEFINED +#define FuzzCommon_DEFINED + #include "Fuzz.h" #include "SkPath.h" #include "SkRegion.h" // We don't always want to test NaNs and infinities. -static void fuzz_nice_float(Fuzz* fuzz, float* f) { +static inline void fuzz_nice_float(Fuzz* fuzz, float* f) { float v; fuzz->next(&v); constexpr float kLimit = 1.0e35f; // FLT_MAX? @@ -23,54 +26,6 @@ inline void fuzz_nice_float(Fuzz* fuzz, float* f, Args... rest) { fuzz_nice_float(fuzz, rest...); } -static void fuzz_path(Fuzz* fuzz, SkPath* path, int maxOps) { - if (maxOps < 2) { - maxOps = 2; - } - uint8_t fillType; - fuzz->nextRange(&fillType, 0, (uint8_t)SkPath::kInverseEvenOdd_FillType); - path->setFillType((SkPath::FillType)fillType); - uint8_t numOps; - fuzz->nextRange(&numOps, 2, maxOps); - for (uint8_t i = 0; i < numOps; ++i) { - uint8_t op; - fuzz->nextRange(&op, 0, 6); - SkScalar a, b, c, d, e, f; - switch (op) { - case 0: - fuzz_nice_float(fuzz, &a, &b); - path->moveTo(a, b); - break; - case 1: - fuzz_nice_float(fuzz, &a, &b); - path->lineTo(a, b); - break; - case 2: - fuzz_nice_float(fuzz, &a, &b, &c, &d); - path->quadTo(a, b, c, d); - break; - case 3: - fuzz_nice_float(fuzz, &a, &b, &c, &d, &e); - path->conicTo(a, b, c, d, e); - break; - case 4: - fuzz_nice_float(fuzz, &a, &b, &c, &d, &e, &f); - path->cubicTo(a, b, c, d, e, f); - break; - case 5: - fuzz_nice_float(fuzz, &a, &b, &c, &d, &e); - path->arcTo(a, b, c, d, e); - break; - case 6: - path->close(); - break; - default: - SkASSERT(false); - break; - } - } -} - template <> inline void Fuzz::next(SkRegion* region) { uint8_t N; @@ -86,3 +41,10 @@ inline void Fuzz::next(SkRegion* region) { } } } + +// allows some float values for path points +void FuzzPath(Fuzz* fuzz, SkPath* path, int maxOps); +// allows all float values for path points +void BuildPath(Fuzz* fuzz, SkPath* path, int last_verb); + +#endif -- cgit v1.2.3