/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "fuzz/Fuzz.h" #include "fuzz/FuzzCommon.h" #include "include/core/SkPathMeasure.h" void inline ignoreResult(bool ) {} DEF_FUZZ(PathMeasure, fuzz) { uint8_t bits; fuzz->next(&bits); SkScalar distance[6]; for (auto index = 0; index < 6; ++index) { fuzz->next(&distance[index]); } SkPath path; FuzzEvilPath(fuzz, &path, SkPath::Verb::kDone_Verb); SkRect bounds = path.getBounds(); SkScalar maxDim = std::max(bounds.width(), bounds.height()); if (maxDim > 1000000) { return; } SkScalar resScale = maxDim / 1000; SkPathMeasure measure(path, bits & 1, resScale); SkPoint position; SkVector tangent; ignoreResult(measure.getPosTan(distance[0], &position, &tangent)); SkPath dst; ignoreResult(measure.getSegment(distance[1], distance[2], &dst, (bits >> 1) & 1)); ignoreResult(measure.nextContour()); ignoreResult(measure.getPosTan(distance[3], &position, &tangent)); ignoreResult(measure.getSegment(distance[4], distance[5], &dst, (bits >> 2) & 1)); }