diff options
author | 2016-09-06 08:54:10 -0700 | |
---|---|---|
committer | 2016-09-06 08:54:10 -0700 | |
commit | e97fe839728aa77a413353395b5a4c94c4c1d931 (patch) | |
tree | dd233ca9aa536e423b1f4b39444c4c75ae76bfdd /tests | |
parent | b2be02bb39351ed97e789f7d3e97c7180f72560f (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')
-rw-r--r-- | tests/PathTest.cpp | 20 |
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); |