Chromium Code Reviews| Index: src/core/SkBitmap.cpp |
| diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp |
| index 9db596de9cc9023fe32ae9b5ba24ae473e041345..e446df9e201de9e99f56495cb7002f197980d30c 100644 |
| --- a/src/core/SkBitmap.cpp |
| +++ b/src/core/SkBitmap.cpp |
| @@ -1202,16 +1202,17 @@ bool SkBitmap::ReadRawPixels(SkReadBuffer* buffer, SkBitmap* bitmap) { |
| } |
| const size_t ramRB = info.minRowBytes(); |
| - const int height = info.height(); |
| - const size_t snugSize = snugRB * height; |
| - const size_t ramSize = ramRB * height; |
| - if (!buffer->validate(snugSize <= ramSize)) { |
| + const int height = SkMax32(info.height(), 0); |
|
sugoi1
2015/01/07 16:09:04
height can apparently be negative and valid, which
|
| + const uint64_t snugSize = sk_64_mul(snugRB, height); |
| + const uint64_t ramSize = sk_64_mul(ramRB, height); |
| + static const uint64_t max_size_t = (size_t)(-1); |
| + if (!buffer->validate((snugSize <= ramSize) && (ramSize <= max_size_t))) { |
| return false; |
| } |
| - SkAutoDataUnref data(SkData::NewUninitialized(ramSize)); |
| + SkAutoDataUnref data(SkData::NewUninitialized(static_cast<size_t>(ramSize))); |
|
sugoi1
2015/01/07 16:09:04
This cast and the following one should do nothing
reed1
2015/01/07 16:19:35
SkToSizeT(ramSize) -- this guy checks for overflow
sugoi1
2015/01/07 16:28:35
Done.
|
| char* dst = (char*)data->writable_data(); |
| - buffer->readByteArray(dst, snugSize); |
| + buffer->readByteArray(dst, static_cast<size_t>(snugSize)); |
| if (snugSize != ramSize) { |
| const char* srcRow = dst + snugRB * (height - 1); |