From 013e0e6d482f61181b829bf5ebfcad912c0061b1 Mon Sep 17 00:00:00 2001 From: caryclark Date: Fri, 10 Jun 2016 07:59:50 -0700 Subject: [PATCH] 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 --- src/pathops/SkOpCoincidence.cpp | 3 +++ tests/PathOpsBuilderTest.cpp | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) 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); +} -- 2.34.1