      do {
          SkScalar    length = meas.getLength();
          SkScalar    distance = this->begin(length);
-@@ -23,6 +28,11 @@ bool Sk1DPathEffect::filterPath(SkPath* dst, const SkPath& src,
-             if (delta <= 0) {
-                 break;
-             }
-+#if defined(IS_FUZZING)
-+            if (delta <= SK_ScalarNearlyZero) {
-+                return false;
-+            }
-+#endif
-             distance += delta;
-         }
-     } while (meas.nextContour());
-@@ -65,6 +75,11 @@ SkPath1DPathEffect::SkPath1DPathEffect(const SkPath& path, SkScalar advance,
- 
- bool SkPath1DPathEffect::filterPath(SkPath* dst, const SkPath& src,
-                             SkStrokeRec* rec, const SkRect* cullRect) const {
-+#if defined(IS_FUZZING)
-+    if (dst->countVerbs() > 100 || dst->countPoints() > 100) {
-+        return false;
-+    }
-+#endif
-     if (fAdvance > 0) {
-         rec->setFillStyle();
-         return this->INHERITED::filterPath(dst, src, rec, cullRect);
 diff --git a/src/effects/Sk2DPathEffect.cpp b/src/effects/Sk2DPathEffect.cpp
 index e7ef54b6f7..727aa5221f 100644
 --- a/src/effects/Sk2DPathEffect.cpp

     SkVector prevNormal = fPrevOutset;
     for (int i = 0; i < numSteps-1; ++i) {
         SkVector currNormal;

     int count = builder.build_edges(path, &clipRect, 0, pathContainedInClip,
                                     SkEdgeBuilder::kAnalyticEdge);
     SkAnalyticEdge** list = builder.analyticEdgeList();
diff --git a/src/core/SkScan_Hairline.cpp b/src/core/SkScan_Hairline.cpp
index 1f12efefc5..efb5c101ad 100644
--- a/src/core/SkScan_Hairline.cpp
+++ b/src/core/SkScan_Hairline.cpp
@@ -118,7 +118,11 @@ void SkScan::HairLineRgn(const SkPoint array[], int arrayCount, const SkRegion*
             if (ix0 == ix1) {// too short to draw
                 continue;
             }
-
+#if defined(IS_FUZZING)
+            if ((ix0 - ix1) > 100000 || (ix0 - ix1) < 0) {
+                continue; // too big to draw
+            }
+#endif
             SkFixed slope = SkFixedDiv(dy, dx);
             SkFixed startY = SkFDot6ToFixed(y0) + (slope * ((32 - x0) & 63) >> 6);
 
@@ -133,7 +137,11 @@ void SkScan::HairLineRgn(const SkPoint array[], int arrayCount, const SkRegion*
             if (iy0 == iy1) { // too short to draw
                 continue;
             }
-
+#if defined(IS_FUZZING)
+            if ((iy0 - iy1) > 100000 || (iy0 - iy1) < 0) {
+                continue; // too big to draw
+            }
+#endif
             SkFixed slope = SkFixedDiv(dx, dy);
             SkFixed startX = SkFDot6ToFixed(x0) + (slope * ((32 - y0) & 63) >> 6);
 
diff --git a/src/core/SkScan_Path.cpp b/src/core/SkScan_Path.cpp
index 2373e62d46..25b17480c2 100644
--- a/src/core/SkScan_Path.cpp
+++ b/src/core/SkScan_Path.cpp
@@ -254,6 +254,11 @@ static void walk_convex_edges(SkEdge* prevHead, SkPath::FillType,
             }
             local_top = local_bot + 1;
         } else {
