Index: tests/DashPathEffectTest.cpp |
diff --git a/tests/DashPathEffectTest.cpp b/tests/DashPathEffectTest.cpp |
index 7e832cdd6698ab5197f01270910733ad14e069a8..e3a380411dd726834f828533b362713ca8aceb59 100644 |
--- a/tests/DashPathEffectTest.cpp |
+++ b/tests/DashPathEffectTest.cpp |
@@ -10,6 +10,8 @@ |
#include "SkDashPathEffect.h" |
#include "SkWriteBuffer.h" |
#include "SkStrokeRec.h" |
+#include "SkCanvas.h" |
+#include "SkSurface.h" |
// crbug.com/348821 was rooted in SkDashPathEffect refusing to flatten and unflatten itself when |
// the effect is nonsense. Here we test that it fails when passed nonsense parameters. |
@@ -99,3 +101,17 @@ DEF_TEST(DashPath_bug4871, r) { |
SkPath fill; |
paint.getFillPath(path, &fill); |
} |
+ |
+// Verify that long lines with many dashes don't cause overflows/OOMs. |
+DEF_TEST(DashPathEffectTest_asPoints_limit, r) { |
+ sk_sp<SkSurface> surface(SkSurface::MakeRaster(SkImageInfo::MakeN32Premul(256, 256))); |
+ SkCanvas* canvas = surface->getCanvas(); |
+ |
+ SkPaint p; |
+ p.setStyle(SkPaint::kStroke_Style); |
+ // force the bounds to outset by a large amount |
+ p.setStrokeWidth(5.0e10f); |
+ const SkScalar intervals[] = { 1, 1 }; |
+ p.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 0)); |
+ canvas->drawLine(1, 1, 1, 5.0e10f, p); |
+} |