From bc721ba4be626e3ba753f55341a7019d98044102 Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Mon, 21 May 2018 16:50:01 -0400 Subject: remove fragile hack in addOval to avoid computing bounds Bug: skia: Change-Id: Ide917f54633370f1fce46a115fa923794b981e2e Reviewed-on: https://skia-review.googlesource.com/129461 Reviewed-by: Mike Klein Commit-Queue: Mike Reed --- tests/PathTest.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'tests/PathTest.cpp') diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp index 9d8c18f997..9885a92351 100644 --- a/tests/PathTest.cpp +++ b/tests/PathTest.cpp @@ -5051,3 +5051,24 @@ DEF_TEST(Path_isRect, reporter) { compare.set(&points53[1], 4); REPORTER_ASSERT(reporter, rect == compare); } + +/* + * addOval (which is called by bitmapdevice::drawOval) used to assume that if the bounds were + * finite, then the resulting path would be too. However, with the right (i.e. nasty) coordinates, + * its possible to make the calculation of the path overflow float and produce a nonfinite path. + * The fix was easy -- we just remove that assumption from addOval, and instead let it (lazily) + * compute the path as normal (i.e. just the same as if the client has made the calls to construct + * a path from conics). + * + * Before the fix, this test would assert + */ +DEF_TEST(giant_ovals, reporter) { + SkPaint paint; + SkRect r = { -3.01901558E+38f, 0, -5.32108205E+37f, 10 }; + + auto surface(SkSurface::MakeRasterN32Premul(84, 88)); + SkCanvas* canvas = surface->getCanvas(); + + canvas->translate(-r.fLeft, 0); + canvas->drawOval(r, paint); +} -- cgit v1.2.3