| Index: src/pathops/SkDCubicLineIntersection.cpp | 
| diff --git a/src/pathops/SkDCubicLineIntersection.cpp b/src/pathops/SkDCubicLineIntersection.cpp | 
| index a891abec66f6bc4479760415715d56f18240b4bb..0abb75b394984476cfcf644ff6e4e0a0a513cf47 100644 | 
| --- a/src/pathops/SkDCubicLineIntersection.cpp | 
| +++ b/src/pathops/SkDCubicLineIntersection.cpp | 
| @@ -107,6 +107,9 @@ public: | 
|  | 
| int intersect() { | 
| addExactEndPoints(); | 
| +        if (fAllowNear) { | 
| +            addNearEndPoints(); | 
| +        } | 
| double rootVals[3]; | 
| int roots = intersectRay(rootVals); | 
| for (int index = 0; index < roots; ++index) { | 
| @@ -122,9 +125,6 @@ public: | 
| fIntersections->insert(cubicT, lineT, pt); | 
| } | 
| } | 
| -        if (fAllowNear) { | 
| -            addNearEndPoints(); | 
| -        } | 
| return fIntersections->used(); | 
| } | 
|  | 
| @@ -137,6 +137,9 @@ public: | 
|  | 
| int horizontalIntersect(double axisIntercept, double left, double right, bool flipped) { | 
| addExactHorizontalEndPoints(left, right, axisIntercept); | 
| +        if (fAllowNear) { | 
| +            addNearHorizontalEndPoints(left, right, axisIntercept); | 
| +        } | 
| double rootVals[3]; | 
| int roots = horizontalIntersect(axisIntercept, rootVals); | 
| for (int index = 0; index < roots; ++index) { | 
| @@ -147,9 +150,6 @@ public: | 
| fIntersections->insert(cubicT, lineT, pt); | 
| } | 
| } | 
| -        if (fAllowNear) { | 
| -            addNearHorizontalEndPoints(left, right, axisIntercept); | 
| -        } | 
| if (flipped) { | 
| fIntersections->flip(); | 
| } | 
| @@ -165,6 +165,9 @@ public: | 
|  | 
| int verticalIntersect(double axisIntercept, double top, double bottom, bool flipped) { | 
| addExactVerticalEndPoints(top, bottom, axisIntercept); | 
| +        if (fAllowNear) { | 
| +            addNearVerticalEndPoints(top, bottom, axisIntercept); | 
| +        } | 
| double rootVals[3]; | 
| int roots = verticalIntersect(axisIntercept, rootVals); | 
| for (int index = 0; index < roots; ++index) { | 
| @@ -175,9 +178,6 @@ public: | 
| fIntersections->insert(cubicT, lineT, pt); | 
| } | 
| } | 
| -        if (fAllowNear) { | 
| -            addNearVerticalEndPoints(top, bottom, axisIntercept); | 
| -        } | 
| if (flipped) { | 
| fIntersections->flip(); | 
| } | 
| @@ -287,6 +287,17 @@ public: | 
| } else if (ptSet == kPointUninitialized) { | 
| *pt = fCubic.ptAtT(cT); | 
| } | 
| +        SkPoint gridPt = pt->asSkPoint(); | 
| +        if (gridPt == fLine[0].asSkPoint()) { | 
| +            *lineT = 0; | 
| +        } else if (gridPt == fLine[1].asSkPoint()) { | 
| +            *lineT = 1; | 
| +        } | 
| +        if (gridPt == fCubic[0].asSkPoint() && approximately_equal(*cubicT, 0)) { | 
| +            *cubicT = 0; | 
| +        } else if (gridPt == fCubic[3].asSkPoint() && approximately_equal(*cubicT, 1)) { | 
| +            *cubicT = 1; | 
| +        } | 
| return true; | 
| } | 
|  | 
|  |