From 03013084aac29967ee0559efce817b39234f4aa6 Mon Sep 17 00:00:00 2001 From: Florin Malita Date: Tue, 18 Apr 2017 13:47:15 -0400 Subject: Fix SkATan2_255 fuzzer crash Test for degenerate values after computing the ratio, instead of attempting to catch all tricky cases upfront. BUG=skia:6511 Change-Id: I8e3421675994dd68a1eff1af3f1456917dd1f9e1 Reviewed-on: https://skia-review.googlesource.com/13726 Reviewed-by: Herb Derby Commit-Queue: Florin Malita --- src/effects/gradients/SkSweepGradient.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp index 27517bb080..23f77b3ab4 100644 --- a/src/effects/gradients/SkSweepGradient.cpp +++ b/src/effects/gradients/SkSweepGradient.cpp @@ -9,6 +9,7 @@ #include "SkSweepGradient.h" #include +#include static SkMatrix translate(SkScalar dx, SkScalar dy) { SkMatrix matrix; @@ -80,12 +81,16 @@ static unsigned SkATan2_255(float y, float x) { } #else static unsigned SkATan2_255(float y, float x) { - if (y == 0 && x == 0) return 0; float yabs = sk_float_abs(y), - xabs = sk_float_abs(x); + xabs = sk_float_abs(x); float little, big; std::tie(little, big) = std::minmax(yabs, xabs); float a = little/big; + if (!std::isfinite(a)) { + return 0; + } + SkASSERT(a >=0 && a <= 1); + float s = a * a; float r = a*(40.57589784014689f + s*(-13.222755844396332f + s*(6.314046289038564f - s*1.7989502668982151f))); -- cgit v1.2.3