diff options
author | caryclark <caryclark@google.com> | 2016-02-24 09:03:07 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-24 09:03:07 -0800 |
commit | d78c088b6136590371fddd4cab67bfb4bf692fd3 (patch) | |
tree | 7b928823d239ea0c5089b9696af635f694873188 /tests/PathOpsOpTest.cpp | |
parent | d9381acb0efc84e5b54627de554c6cefc43ca97d (diff) |
fix path ops fuzz bug
If one path is empty and the other has extreme values, the
intermediate coincident paths cannot be resolved, but triggers
an assert that a data structure unexpectedly has zero-length.
Tunnel this failure back up to the top and return that the
entire path op fails.
A future optimization could detect the empty path and avoid
this, allowing the op to succeed -- not sure that it's worth
the additional logic though.
TBR=reed@google.com
BUG=535151
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1730293002
Review URL: https://codereview.chromium.org/1730293002
Diffstat (limited to 'tests/PathOpsOpTest.cpp')
-rw-r--r-- | tests/PathOpsOpTest.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/PathOpsOpTest.cpp b/tests/PathOpsOpTest.cpp index 7639cd9e8f..7de910cf6f 100644 --- a/tests/PathOpsOpTest.cpp +++ b/tests/PathOpsOpTest.cpp @@ -5564,6 +5564,18 @@ DEF_TEST(PathOpsOp, reporter) { } } +static void fuzz535151(skiatest::Reporter* reporter, const char* filename) { + SkPath one; + one.setFillType(SkPath::kWinding_FillType); + SkPath two; + two.setFillType(SkPath::kWinding_FillType); + two.moveTo(0, 0); + two.lineTo(0, 50); + two.lineTo(4.29497e+09f, 50); + SkPath dummy; + REPORTER_ASSERT(reporter, !Op(one, two, kIntersect_SkPathOp, &dummy)); +} + static void bufferOverflow(skiatest::Reporter* reporter, const char* filename) { SkPath path; path.addRect(0,0, 300,170141183460469231731687303715884105728.f); @@ -5781,6 +5793,7 @@ path.lineTo(SkBits2Float(0x40f8fbe0), SkBits2Float(0xcf223cc0)); // 7.78075f, - } static struct TestDesc failTests[] = { + TEST(fuzz535151), TEST(fuzz753_91), TEST(fuzz714), TEST(fuzz487a), |