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
This commit is contained in:
parent
b9e56c1ee6
commit
e7be3e5c79
@ -109,20 +109,8 @@ static void eval_sheet(const SkPoint edge[], int nu, int nv, int iu, int iv,
|
||||
pt->set(x, y);
|
||||
}
|
||||
|
||||
static int ScalarTo255(SkScalar v) {
|
||||
int scale = SkScalarToFixed(v) >> 8;
|
||||
if (scale < 0) {
|
||||
scale = 0;
|
||||
} else if (scale > 255) {
|
||||
scale = 255;
|
||||
}
|
||||
return scale;
|
||||
}
|
||||
|
||||
static SkColor make_color(SkScalar s, SkScalar t) {
|
||||
int cs = ScalarTo255(s);
|
||||
int ct = ScalarTo255(t);
|
||||
return SkColorSetARGB(0xFF, cs, 0, 0) + SkColorSetARGB(0, 0, ct, 0);
|
||||
return SkColorSetARGB(0xFF, SkUnitScalarClampToByte(s), SkUnitScalarClampToByte(t), 0);
|
||||
}
|
||||
|
||||
void Patch::draw(SkCanvas* canvas, const SkPaint& paint, int nu, int nv,
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user