diff options
author | benjaminwagner <benjaminwagner@google.com> | 2016-03-01 13:44:10 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-01 13:44:10 -0800 |
commit | e7be3e5c7999230673c8272a2c73cb7261e735c6 (patch) | |
tree | 4aaa6c525feb890e3fb28a7b61176d6b7f876b75 /src | |
parent | b9e56c1ee6c4c8ae0a2e9247e504d92de4a6bfaa (diff) |
Check bounds before casting float to integer in SamplePatch.cpp and SkBlurMaskFilter::CreateEmboss.
BUG=skia:4632
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1693013002
Review URL: https://codereview.chromium.org/1693013002
Diffstat (limited to 'src')
-rw-r--r-- | src/effects/SkEmbossMaskFilter.cpp | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/src/effects/SkEmbossMaskFilter.cpp b/src/effects/SkEmbossMaskFilter.cpp index 64afa49447..aacc191ff7 100644 --- a/src/effects/SkEmbossMaskFilter.cpp +++ b/src/effects/SkEmbossMaskFilter.cpp @@ -17,15 +17,6 @@ SkMaskFilter* SkEmbossMaskFilter::Create(SkScalar blurSigma, const Light& light) return new SkEmbossMaskFilter(blurSigma, light); } -static inline int pin2byte(int n) { - if (n < 0) { - n = 0; - } else if (n > 0xFF) { - n = 0xFF; - } - return n; -} - SkMaskFilter* SkBlurMaskFilter::CreateEmboss(const SkScalar direction[3], SkScalar ambient, SkScalar specular, SkScalar blurRadius) { @@ -39,17 +30,14 @@ SkMaskFilter* SkBlurMaskFilter::CreateEmboss(SkScalar blurSigma, const SkScalar return nullptr; } - // ambient should be 0...1 as a scalar - int am = pin2byte(SkScalarToFixed(ambient) >> 8); - - // specular should be 0..15.99 as a scalar - int sp = pin2byte(SkScalarToFixed(specular) >> 12); - SkEmbossMaskFilter::Light light; memcpy(light.fDirection, direction, sizeof(light.fDirection)); - light.fAmbient = SkToU8(am); - light.fSpecular = SkToU8(sp); + // ambient should be 0...1 as a scalar + light.fAmbient = SkUnitScalarClampToByte(ambient); + // specular should be 0..15.99 as a scalar + static const SkScalar kSpecularMultiplier = SkIntToScalar(255) / 16; + light.fSpecular = static_cast<U8CPU>(SkScalarPin(specular, 0, 16) * kSpecularMultiplier + 0.5); return SkEmbossMaskFilter::Create(blurSigma, light); } |