aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkPathMeasure.cpp5
-rw-r--r--tests/PathMeasureTest.cpp10
2 files changed, 13 insertions, 2 deletions
diff --git a/src/core/SkPathMeasure.cpp b/src/core/SkPathMeasure.cpp
index cdcd164018..4fb18934d9 100644
--- a/src/core/SkPathMeasure.cpp
+++ b/src/core/SkPathMeasure.cpp
@@ -667,7 +667,7 @@ bool SkPathMeasure::getSegment(SkScalar startD, SkScalar stopD, SkPath* dst,
}
bool SkPathMeasure::isClosed() {
- (void)this->getLength();
+ (void)this->getLength(); // make sure we measure the current contour
return fIsClosed;
}
@@ -675,7 +675,8 @@ bool SkPathMeasure::isClosed() {
we're done with the path.
*/
bool SkPathMeasure::nextContour() {
- fLength = -1;
+ (void)this->getLength(); // make sure we measure the current contour
+ fLength = -1; // now signal that we should build the next set of segments
return this->getLength() > 0;
}
diff --git a/tests/PathMeasureTest.cpp b/tests/PathMeasureTest.cpp
index df66578f1b..bc75c5f122 100644
--- a/tests/PathMeasureTest.cpp
+++ b/tests/PathMeasureTest.cpp
@@ -217,3 +217,13 @@ DEF_TEST(PathMeasureConic, reporter) {
REPORTER_ASSERT(reporter, 19.5f < stdP.fX && stdP.fX < 20.5f);
REPORTER_ASSERT(reporter, 19.5f < hiP.fX && hiP.fX < 20.5f);
}
+
+// Regression test for b/26425223
+DEF_TEST(PathMeasure_nextctr, reporter) {
+ SkPath path;
+ path.moveTo(0, 0); path.lineTo(100, 0);
+
+ SkPathMeasure meas(path, false);
+ // only expect 1 contour, even if we didn't explicitly call getLength() ourselves
+ REPORTER_ASSERT(reporter, !meas.nextContour());
+}