aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/PathTest.cpp
diff options
context:
space:
mode:
authorGravatar caryclark <caryclark@google.com>2016-09-06 08:54:10 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-09-06 08:54:10 -0700
commite97fe839728aa77a413353395b5a4c94c4c1d931 (patch)
treedd233ca9aa536e423b1f4b39444c4c75ae76bfdd /tests/PathTest.cpp
parentb2be02bb39351ed97e789f7d3e97c7180f72560f (diff)
compare degenerates with tolerance
Conics with very large w values can be approximated with two straight lines. This avoids iterating endlessly in an attempt to create quadratics with unstable numerics. Check to see if the first chop generated a pair of lines within the default point comparison tolerance. R=reed@google.com BUG=643933, 643665 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2312923002 Review-Url: https://codereview.chromium.org/2312923002
Diffstat (limited to 'tests/PathTest.cpp')
-rw-r--r--tests/PathTest.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp
index 429d9e980f..032b646d4e 100644
--- a/tests/PathTest.cpp
+++ b/tests/PathTest.cpp
@@ -138,6 +138,25 @@ static void test_fuzz_crbug_638223() {
canvas->drawPath(path, paint);
}
+static void test_fuzz_crbug_643933() {
+ auto surface(SkSurface::MakeRasterN32Premul(250, 250));
+ SkCanvas* canvas = surface->getCanvas();
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPath path;
+ path.moveTo(0, 0);
+ path.conicTo(SkBits2Float(0x002001f2), SkBits2Float(0x4161ffff), // 2.93943e-39f, 14.125f
+ SkBits2Float(0x49f7224d), SkBits2Float(0x45eec8df), // 2.02452e+06f, 7641.11f
+ SkBits2Float(0x721aee0c)); // 3.0687e+30f
+ canvas->drawPath(path, paint);
+ path.reset();
+ path.moveTo(0, 0);
+ path.conicTo(SkBits2Float(0x00007ff2), SkBits2Float(0x4169ffff), // 4.58981e-41f, 14.625f
+ SkBits2Float(0x43ff2261), SkBits2Float(0x41eeea04), // 510.269f, 29.8643f
+ SkBits2Float(0x5d06eff8)); // 6.07704e+17f
+ canvas->drawPath(path, paint);
+}
+
/**
* In debug mode, this path was causing an assertion to fail in
* SkPathStroker::preJoinTo() and, in Release, the use of an unitialized value.
@@ -4256,6 +4275,7 @@ DEF_TEST(PathContains, reporter) {
}
DEF_TEST(Paths, reporter) {
+ test_fuzz_crbug_643933();
test_sect_with_horizontal_needs_pinning();
test_crbug_629455(reporter);
test_fuzz_crbug_627414(reporter);