aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar caryclark <caryclark@google.com>2016-06-10 07:59:50 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-06-10 07:59:50 -0700
commit013e0e6d482f61181b829bf5ebfcad912c0061b1 (patch)
tree6cc3dc2956fd60bfc60c5d6f622189dce9ab7703
parent9207caebbb34a8f239191a2f9f639abf183bf568 (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-xsrc/pathops/SkOpCoincidence.cpp3
-rw-r--r--tests/PathOpsBuilderTest.cpp21
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);
+}