+diff --git a/src/core/SkAAClip.cpp b/src/core/SkAAClip.cpp
+index b22b8ebebb..aec422fa96 100644
+--- a/src/core/SkAAClip.cpp
++++ b/src/core/SkAAClip.cpp
+@@ -1630,6 +1630,12 @@ static void operateY(SkAAClip::Builder& builder, const SkAAClip& A,
+     int topB = iterB.top();
+     int botB = iterB.bottom();
+ 
++#if defined(IS_FUZZING)
++    if ((botA - topA) > 100000 || (botB - topB) > 100000) {
++        return;
++    }
++#endif
++
+     do {
+         const uint8_t* rowA = nullptr;
+         const uint8_t* rowB = nullptr;
 diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
-index 478617f828..f4ead536aa 100644
+index 6f8ee30602..d3e7bec831 100644
 --- a/src/core/SkDraw.cpp
 +++ b/src/core/SkDraw.cpp
-@@ -1120,6 +1120,12 @@ void SkDraw::drawPath(const SkPath& origSrcPath, const SkPaint& origPaint,
+@@ -1134,6 +1134,12 @@ void SkDraw::drawPath(const SkPath& origSrcPath, const SkPaint& origPaint,
      // transform the path into device space
      pathPtr->transform(*matrix, devPathPtr);
  

         reader.readPoint(&offset);
         SkPaint font;
diff --git a/src/effects/Sk1DPathEffect.cpp b/src/effects/Sk1DPathEffect.cpp
index 8a74c16cda..f6a5557914 100644
--- a/src/effects/Sk1DPathEffect.cpp
+++ b/src/effects/Sk1DPathEffect.cpp
@@ -15,6 +15,11 @@

     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 {
