| Index: src/effects/gradients/SkLinearGradient.cpp
|
| diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
|
| index 1bdce39d985370c51e5dbcd3c9187c26518c3379..209b833973291f3b4199299320510935c6f31ecd 100644
|
| --- a/src/effects/gradients/SkLinearGradient.cpp
|
| +++ b/src/effects/gradients/SkLinearGradient.cpp
|
| @@ -610,7 +610,10 @@ void SkLinearGradient::LinearGradientContext::shade4_dx_clamp(SkPMColor dstC[],
|
|
|
| if (dx_is_pos) {
|
| if (fx < 0) {
|
| - int n = SkTMin(SkFloatToIntFloor(-fx * invDx) + 1, count);
|
| + // count is guaranteed to be positive, but the first arg may overflow int32 after
|
| + // increment => casting to uint32 ensures correct clamping.
|
| + int n = SkTMin<uint32_t>(SkFloatToIntFloor(-fx * invDx) + 1, count);
|
| + SkASSERT(n > 0);
|
| fill<apply_alpha>(dstC, n, rec[0].fColor);
|
| count -= n;
|
| dstC += n;
|
| @@ -622,7 +625,10 @@ void SkLinearGradient::LinearGradientContext::shade4_dx_clamp(SkPMColor dstC[],
|
| }
|
| } else { // dx < 0
|
| if (fx > 1) {
|
| - int n = SkTMin(SkFloatToIntFloor((1 - fx) * invDx) + 1, count);
|
| + // count is guaranteed to be positive, but the first arg may overflow int32 after
|
| + // increment => casting to uint32 ensures correct clamping.
|
| + int n = SkTMin<uint32_t>(SkFloatToIntFloor((1 - fx) * invDx) + 1, count);
|
| + SkASSERT(n > 0);
|
| fill<apply_alpha>(dstC, n, rec[fRecs.count() - 1].fColor);
|
| count -= n;
|
| dstC += n;
|
|
|