aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Jim Van Verth <jvanverth@google.com>2018-07-23 11:48:31 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-23 16:11:14 +0000
commit206dbe8a21b614bbf09b9d2b488ff453e41fdfd9 (patch)
tree04dcd5be331ac2351eb9c2abcce08f6429b57ca0 /src
parent0f21c2327ea018becec6948e60104645d3b7df26 (diff)
Restrict radial step count
Bug: skia:8164 Change-Id: I180f3c097b76f89ce57b780eaf28fb3db2759831 Reviewed-on: https://skia-review.googlesource.com/142895 Commit-Queue: Jim Van Verth <jvanverth@google.com> Commit-Queue: Ben Wagner <bungeman@google.com> Auto-Submit: Jim Van Verth <jvanverth@google.com> Reviewed-by: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/utils/SkPolyUtils.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/utils/SkPolyUtils.cpp b/src/utils/SkPolyUtils.cpp
index 0d1b71c76b..8a4bf49000 100644
--- a/src/utils/SkPolyUtils.cpp
+++ b/src/utils/SkPolyUtils.cpp
@@ -486,7 +486,13 @@ bool SkComputeRadialSteps(const SkVector& v1, const SkVector& v2, SkScalar r,
}
SkScalar theta = SkScalarATan2(rSin, rCos);
- int steps = SkScalarRoundToInt(SkScalarAbs(r*theta*kRecipPixelsPerArcSegment));
+ SkScalar floatSteps = SkScalarAbs(r*theta*kRecipPixelsPerArcSegment);
+ // limit the number of steps to at most max uint16_t (that's all we can index)
+ // knock one value off the top to account for rounding
+ if (floatSteps >= (1 << 16)-1) {
+ return false;
+ }
+ int steps = SkScalarRoundToInt(floatSteps);
SkScalar dTheta = steps > 0 ? theta / steps : 0;
*rotSin = SkScalarSinCos(dTheta, rotCos);