| Index: src/core/SkBitmap.cpp
|
| diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
|
| index 7cc7344d2f94432e03465cce78582aceed129e45..8d6063a62c0c12a9dcfbe2c1e36c48d03acbc1f2 100644
|
| --- a/src/core/SkBitmap.cpp
|
| +++ b/src/core/SkBitmap.cpp
|
| @@ -1145,11 +1145,27 @@ bool SkBitmap::ReadRawPixels(SkReadBuffer* buffer, SkBitmap* bitmap) {
|
|
|
| SkAutoTUnref<SkColorTable> ctable;
|
| if (buffer->readBool()) {
|
| - ctable.reset(new SkColorTable(*buffer));
|
| + ctable.reset(SkColorTable::Create(*buffer));
|
| + if (!ctable) {
|
| + return false;
|
| + }
|
|
|
| - unsigned char maxIndex = ctable->count() ? ctable->count()-1 : 0;
|
| - for (uint64_t i = 0; i < ramSize; ++i) {
|
| - dst[i] = SkTMin(dst[i], maxIndex);
|
| + if (info.isEmpty()) {
|
| + // require an empty ctable
|
| + if (ctable->count() != 0) {
|
| + buffer->validate(false);
|
| + return false;
|
| + }
|
| + } else {
|
| + // require a non-empty ctable
|
| + if (ctable->count() == 0) {
|
| + buffer->validate(false);
|
| + return false;
|
| + }
|
| + unsigned char maxIndex = ctable->count() - 1;
|
| + for (uint64_t i = 0; i < ramSize; ++i) {
|
| + dst[i] = SkTMin(dst[i], maxIndex);
|
| + }
|
| }
|
| }
|
|
|
|
|