| /* |
| * 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()); |
| 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)); |
| } |