fix teeny dashed path bug
If the path dashed is sufficiently small, there may be no
segments generated to dash. Check for an empty segment list.
R=reed@google.com
BUG=skia:4871
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1645613006
Review URL: https://codereview.chromium.org/1645613006
diff --git a/src/core/SkPathMeasure.cpp b/src/core/SkPathMeasure.cpp
index b06bef7..c0d9792 100644
--- a/src/core/SkPathMeasure.cpp
+++ b/src/core/SkPathMeasure.cpp
@@ -652,6 +652,9 @@
if (startD > stopD) {
return false;
}
+ if (!fSegments.count()) {
+ return false;
+ }
SkPoint p;
SkScalar startT, stopT;
diff --git a/tests/DashPathEffectTest.cpp b/tests/DashPathEffectTest.cpp
index f55bcf8..68fce9a 100644
--- a/tests/DashPathEffectTest.cpp
+++ b/tests/DashPathEffectTest.cpp
@@ -87,3 +87,20 @@
}
}
}
+
+DEF_TEST(DashPath_bug4871, r) {
+ SkPath path;
+ path.moveTo(30, 24);
+ path.cubicTo(30.002f, 24, 30, 24, 30, 24);
+ path.close();
+
+ SkScalar intervals[2] = { 1, 1 };
+ SkAutoTUnref<SkPathEffect> dash(SkDashPathEffect::Create(intervals, 2, 0));
+
+ SkPaint paint;
+ paint.setStyle(SkPaint::kStroke_Style);
+ paint.setPathEffect(dash);
+
+ SkPath fill;
+ paint.getFillPath(path, &fill);
+}