diff options
author | caryclark <caryclark@google.com> | 2016-10-20 12:36:16 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-10-20 12:36:16 -0700 |
commit | 78a37a53365c24670b050acf993818c435922745 (patch) | |
tree | ddc114a5ad3a36c03cce034736552e5a3cca2fa7 | |
parent | 61013b235f474cf1c02d7b69ff36bd05700f9a38 (diff) |
fix more fuzz, carsvg
Fix a few kevin-generated fuzzers.
Remove an assert triggered by
carsvg when thrown through the
distance field stuff.
TBR=reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2427253005
Review-Url: https://chromiumcodereview.appspot.com/2427253005
-rw-r--r-- | src/pathops/SkOpAngle.cpp | 4 | ||||
-rwxr-xr-x | src/pathops/SkOpCoincidence.cpp | 8 | ||||
-rw-r--r-- | tests/PathOpsSimplifyFailTest.cpp | 1 | ||||
-rw-r--r-- | tests/PathOpsSimplifyTest.cpp | 21 | ||||
-rw-r--r-- | tools/pathops_sorter.htm | 13 |
5 files changed, 33 insertions, 14 deletions
diff --git a/src/pathops/SkOpAngle.cpp b/src/pathops/SkOpAngle.cpp index 1223ac106e..5ebf913798 100644 --- a/src/pathops/SkOpAngle.cpp +++ b/src/pathops/SkOpAngle.cpp @@ -160,9 +160,9 @@ bool SkOpAngle::after(SkOpAngle* test) { return COMPARE_RESULT(9, trOpposite); } else if (lrOrder == 1 && trOrder == 1) { SkASSERT(ltOrder < 0); - SkDEBUGCODE(bool trOpposite = oppositePlanes(rh)); +// SkDEBUGCODE(bool trOpposite = oppositePlanes(rh)); bool lrOpposite = lh->oppositePlanes(rh); - SkASSERT(lrOpposite != trOpposite); +// SkASSERT(lrOpposite != trOpposite); return COMPARE_RESULT(10, lrOpposite); } if (lrOrder < 0) { diff --git a/src/pathops/SkOpCoincidence.cpp b/src/pathops/SkOpCoincidence.cpp index dcd22854f8..ef0ea60cc8 100755 --- a/src/pathops/SkOpCoincidence.cpp +++ b/src/pathops/SkOpCoincidence.cpp @@ -481,7 +481,12 @@ bool SkOpCoincidence::addExpanded(DEBUG_COIN_DECLARE_ONLY_PARAMS()) { } if (oTest != oEnd) { oPriorT = oTest->t(); - oTest = coin->flipped() ? oTest->prev() : oTest->upCast()->next(); + if (coin->flipped()) { + oTest = oTest->prev(); + } else { + FAIL_IF(!oTest->upCastable()); + oTest = oTest->upCast()->next(); + } FAIL_IF(!oTest); } @@ -864,6 +869,7 @@ bool SkOpCoincidence::addOverlap(const SkOpSegment* seg1, const SkOpSegment* seg s2 = overS->find(seg2o); e2 = overE->find(seg2o); FAIL_IF(!s2); + FAIL_IF(!e2); if (!s2->starter(e2)->span()->upCast()->windValue()) { return true; } diff --git a/tests/PathOpsSimplifyFailTest.cpp b/tests/PathOpsSimplifyFailTest.cpp index ebb17bc180..b6f210e8ea 100644 --- a/tests/PathOpsSimplifyFailTest.cpp +++ b/tests/PathOpsSimplifyFailTest.cpp @@ -215,7 +215,6 @@ path.close(); testSimplifyFuzz(reporter, path, filename); } - #define TEST(test) test(reporter, #test) DEF_TEST(PathOpsSimplifyFail, reporter) { diff --git a/tests/PathOpsSimplifyTest.cpp b/tests/PathOpsSimplifyTest.cpp index 52699ca6bf..83d82e96f2 100644 --- a/tests/PathOpsSimplifyTest.cpp +++ b/tests/PathOpsSimplifyTest.cpp @@ -5558,11 +5558,32 @@ path.cubicTo(SkBits2Float(0x42e7999a), SkBits2Float(0x43de8000), SkBits2Float(0x testSimplify(reporter, path, filename); } +// triggers angle assert from distance field code +static void carsvg_1(skiatest::Reporter* reporter, const char* filename) { + SkPath path; + path.setFillType((SkPath::FillType) 0); +path.moveTo(SkBits2Float(0x4393d61e), SkBits2Float(0x43e768f9)); // 295.673f, 462.82f +path.cubicTo(SkBits2Float(0x4396b50e), SkBits2Float(0x43e63c20), SkBits2Float(0x43998931), SkBits2Float(0x43e6c43e), SkBits2Float(0x439cb6a8), SkBits2Float(0x43e70ef9)); // 301.414f, 460.47f, 307.072f, 461.533f, 313.427f, 462.117f +path.cubicTo(SkBits2Float(0x439dfc1e), SkBits2Float(0x43e72ce0), SkBits2Float(0x439a285c), SkBits2Float(0x43e717fb), SkBits2Float(0x4398e23c), SkBits2Float(0x43e7027c)); // 315.97f, 462.351f, 308.315f, 462.187f, 305.767f, 462.019f +path.cubicTo(SkBits2Float(0x4398136f), SkBits2Float(0x43e6f4db), SkBits2Float(0x439a7e14), SkBits2Float(0x43e6d390), SkBits2Float(0x439b4ba9), SkBits2Float(0x43e6b956)); // 304.152f, 461.913f, 308.985f, 461.653f, 310.591f, 461.448f +path.cubicTo(SkBits2Float(0x439c2b19), SkBits2Float(0x43e68603), SkBits2Float(0x43abf4df), SkBits2Float(0x43e9ca9e), SkBits2Float(0x43a1daea), SkBits2Float(0x43e912a5)); // 312.337f, 461.047f, 343.913f, 467.583f, 323.71f, 466.146f +path.cubicTo(SkBits2Float(0x43a4f45a), SkBits2Float(0x43e78baf), SkBits2Float(0x43a2a391), SkBits2Float(0x43e86a82), SkBits2Float(0x43a946bd), SkBits2Float(0x43e90c56)); // 329.909f, 463.091f, 325.278f, 464.832f, 338.553f, 466.096f +path.lineTo(SkBits2Float(0x43a4250b), SkBits2Float(0x43e998dc)); // 328.289f, 467.194f +path.cubicTo(SkBits2Float(0x43a8a9c8), SkBits2Float(0x43e8f06c), SkBits2Float(0x43a95cb5), SkBits2Float(0x43e84ea6), SkBits2Float(0x43a6f7c1), SkBits2Float(0x43e9bdb5)); // 337.326f, 465.878f, 338.724f, 464.614f, 333.936f, 467.482f +path.cubicTo(SkBits2Float(0x43a59ed0), SkBits2Float(0x43e9d2ca), SkBits2Float(0x4395ea4d), SkBits2Float(0x43e92afe), SkBits2Float(0x43a06569), SkBits2Float(0x43e7773d)); // 331.241f, 467.647f, 299.83f, 466.336f, 320.792f, 462.932f +path.cubicTo(SkBits2Float(0x438bf0ff), SkBits2Float(0x43ea0fef), SkBits2Float(0x43a0e17a), SkBits2Float(0x43e5f41b), SkBits2Float(0x4398f3fb), SkBits2Float(0x43e804c8)); // 279.883f, 468.124f, 321.762f, 459.907f, 305.906f, 464.037f +path.lineTo(SkBits2Float(0x4393d61e), SkBits2Float(0x43e768f9)); // 295.673f, 462.82f +path.close(); + + testSimplify(reporter, path, filename); +} + static void (*skipTest)(skiatest::Reporter* , const char* filename) = 0; static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0; static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0; static TestDesc tests[] = { + TEST(carsvg_1), TEST(tiger8_393), TEST(bug5169), TEST(testQuads73), diff --git a/tools/pathops_sorter.htm b/tools/pathops_sorter.htm index 612a68492e..c2c8b1a8f2 100644 --- a/tools/pathops_sorter.htm +++ b/tools/pathops_sorter.htm @@ -7,22 +7,15 @@ <div style="height:0"> <div id="cubics"> -{{{103.800003f, 451.399994f}, {118.100006f, 450.600006f}, {115.600006f, 443.899994f}, {115.600006f, 443.899994f}}} id=3 -{{{115.600006f, 443.899994f}, {115.800003f, 445}, {117.200005f, 438.5f}, {115.000008f, 427.299988f}}} id=4 -</div> +{{{304.159515380859375, 463.82958984375}, {300.6310658029279352, 464.7318629437696131}, {299.9421006231858087, 465.564118056070356}, {320.21270751953125, 463.004913330078125}}} id=13 +{{{304.159515380859375, 463.82958984375}, {307.5818980570784902, 462.9544395097227039}, {313.6756188676930037, 462.0134236159228749}, {305.906097412109375, 464.037353515625}}} id=13 +{{{304.159515380859375, 463.82958984375}, {305.906097412109375, 464.037353515625}}} id=14</div> -<div id="cubics2"> -{{{115.6316070556640625, 443.999237060546875}, {115.9124092648639675, 444.4395003767372145}, {117.1065847217176383, 438.0244068281508589}, {115.0000076293945313, 427.29998779296875}}} id=44 -{{{115.6316070556640625, 443.999237060546875}, {115.619154389193497, 443.9797128116054523}, {115.6084986998821762, 443.9467041484157335}, {115.600006103515625, 443.899993896484375}}} id=43 -{{{115.6316070556640625, 443.999237060546875}, {115.8726462570580225, 444.8329011683850354}, {117.0719462895199854, 450.6575499937891891}, {103.8000106811523438, 451.4000244140625}}} id=31 -{{{115.6316070556640625, 443.999237060546875}, {115.6129357357566789, 443.9346599744848163}, {115.6000137329101563, 443.9000244140625}, {115.6000137329101563, 443.9000244140625}}} id=32 -</div> </div> <script type="text/javascript"> var testDivs = [ - cubics2, cubics ]; |