From 2541edf0c6f9dc6897853efe546b5c215034ad49 Mon Sep 17 00:00:00 2001 From: Kevin Lubick Date: Thu, 11 Jan 2018 10:27:14 -0500 Subject: Add in Region SetPath Fuzzer Also refactor a few things to make it easier to use oss-fuzz. Bug: skia: Change-Id: Ie518a6cfc7d57a347b5d09089379f986d33f8b7f Reviewed-on: https://skia-review.googlesource.com/41740 Commit-Queue: Kevin Lubick Reviewed-by: Mike Klein --- fuzz/FuzzCanvas.cpp | 78 +---------------------------------------------------- 1 file changed, 1 insertion(+), 77 deletions(-) (limited to 'fuzz/FuzzCanvas.cpp') diff --git a/fuzz/FuzzCanvas.cpp b/fuzz/FuzzCanvas.cpp index 5bedf9123b..61e51f2157 100644 --- a/fuzz/FuzzCanvas.cpp +++ b/fuzz/FuzzCanvas.cpp @@ -6,6 +6,7 @@ */ #include "Fuzz.h" +#include "FuzzCommon.h" // CORE #include "SkCanvas.h" @@ -91,83 +92,6 @@ inline T make_fuzz_t(Fuzz* fuzz) { return t; } -// We don't always want to test NaNs and infinities. -static void fuzz_nice_float(Fuzz* fuzz, float* f) { - float v; - fuzz->next(&v); - constexpr float kLimit = 1.0e35f; // FLT_MAX? - *f = (v == v && v <= kLimit && v >= -kLimit) ? v : 0.0f; -} - -template -inline void fuzz_nice_float(Fuzz* fuzz, float* f, Args... rest) { - fuzz_nice_float(fuzz, f); - 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: - break; - } - } -} - -template <> -inline void Fuzz::next(SkRegion* region) { - uint8_t N; - this->nextRange(&N, 0, 10); - for (uint8_t i = 0; i < N; ++i) { - SkIRect r; - uint8_t op; - this->next(&r); - r.sort(); - this->nextRange(&op, 0, (uint8_t)SkRegion::kLastOp); - if (!region->op(r, (SkRegion::Op)op)) { - return; - } - } -} - template <> inline void Fuzz::next(SkShader::TileMode* m) { fuzz_enum_range(this, m, 0, SkShader::kTileModeCount - 1); -- cgit v1.2.3