diff options
author | caryclark <caryclark@google.com> | 2016-06-10 07:59:50 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-06-10 07:59:50 -0700 |
commit | 013e0e6d482f61181b829bf5ebfcad912c0061b1 (patch) | |
tree | 6cc3dc2956fd60bfc60c5d6f622189dce9ab7703 | |
parent | 9207caebbb34a8f239191a2f9f639abf183bf568 (diff) |
add fail condition to addexpanded
If coincident pairs don't match,
give up rather than deref null.
R=fmalita@chromium.org
BUG=618991
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2058773002
Review-Url: https://codereview.chromium.org/2058773002
-rwxr-xr-x | src/pathops/SkOpCoincidence.cpp | 3 | ||||
-rw-r--r-- | tests/PathOpsBuilderTest.cpp | 21 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/pathops/SkOpCoincidence.cpp b/src/pathops/SkOpCoincidence.cpp index 42ee5c6091..b72bd6cb37 100755 --- a/src/pathops/SkOpCoincidence.cpp +++ b/src/pathops/SkOpCoincidence.cpp @@ -136,6 +136,9 @@ bool SkOpCoincidence::addExpanded(SkChunkAlloc* allocator } if (oTest != oEnd) { oTest = coin->fFlipped ? oTest->prev() : oTest->upCast()->next(); + if (!oTest) { + return false; + } } } } while ((coin = coin->fNext)); diff --git a/tests/PathOpsBuilderTest.cpp b/tests/PathOpsBuilderTest.cpp index e29b4bc473..8547d85048 100644 --- a/tests/PathOpsBuilderTest.cpp +++ b/tests/PathOpsBuilderTest.cpp @@ -323,3 +323,24 @@ path.lineTo(SkBits2Float(0x42e33333), SkBits2Float(0x42940000)); // 113.6f, 74 SkPath result; builder.resolve(&result); } + +DEF_TEST(SkOpBuilder618991, reporter) { + SkPath path0; + path0.moveTo(140, 40); + path0.lineTo(200, 210); + path0.lineTo(40, 100); + path0.lineTo(2.22223e+07f, 2.22222e+14f); + path0.lineTo(2.22223e+07f, 2.22222e+14f); + + SkPath path1; + path1.moveTo(160, 60); + path1.lineTo(220, 230); + path1.lineTo(60, 120); + path1.lineTo(2.22223e+07f, 2.22222e+14f); + path1.lineTo(2.22223e+07f, 2.22222e+14f); + + SkOpBuilder builder; + builder.add(path0, SkPathOp::kUnion_SkPathOp); + builder.add(path1, SkPathOp::kUnion_SkPathOp); + builder.resolve(&path0); +} |