| Index: src/codec/SkBmpStandardCodec.cpp
|
| diff --git a/src/codec/SkBmpStandardCodec.cpp b/src/codec/SkBmpStandardCodec.cpp
|
| index fd4d6d18bc2d3df2ea6366554dc3bf56ec72700e..cb108681731e2d4b9452b95b803412b0b5f01262 100644
|
| --- a/src/codec/SkBmpStandardCodec.cpp
|
| +++ b/src/codec/SkBmpStandardCodec.cpp
|
| @@ -20,7 +20,7 @@ SkBmpStandardCodec::SkBmpStandardCodec(const SkImageInfo& info, SkStream* stream
|
| SkCodec::SkScanlineOrder rowOrder, bool inIco)
|
| : INHERITED(info, stream, bitsPerPixel, rowOrder)
|
| , fColorTable(nullptr)
|
| - , fNumColors(this->computeNumColors(numColors))
|
| + , fNumColors(numColors)
|
| , fBytesPerColor(bytesPerColor)
|
| , fOffset(offset)
|
| , fSwizzler(nullptr)
|
| @@ -82,9 +82,12 @@ SkCodec::Result SkBmpStandardCodec::onGetPixels(const SkImageInfo& dstInfo,
|
| // access memory outside of our color table array.
|
| *numColors = maxColors;
|
| }
|
| + // Don't bother reading more than maxColors.
|
| + const uint32_t numColorsToRead =
|
| + fNumColors == 0 ? maxColors : SkTMin(fNumColors, maxColors);
|
|
|
| // Read the color table from the stream
|
| - colorBytes = fNumColors * fBytesPerColor;
|
| + colorBytes = numColorsToRead * fBytesPerColor;
|
| SkAutoTDeleteArray<uint8_t> cBuffer(new uint8_t[colorBytes]);
|
| if (stream()->read(cBuffer.get(), colorBytes) != colorBytes) {
|
| SkCodecPrintf("Error: unable to read color table.\n");
|
| @@ -112,7 +115,7 @@ SkCodec::Result SkBmpStandardCodec::onGetPixels(const SkImageInfo& dstInfo,
|
|
|
| // Fill in the color table
|
| uint32_t i = 0;
|
| - for (; i < fNumColors; i++) {
|
| + for (; i < numColorsToRead; i++) {
|
| uint8_t blue = get_byte(cBuffer.get(), i*fBytesPerColor);
|
| uint8_t green = get_byte(cBuffer.get(), i*fBytesPerColor + 1);
|
| uint8_t red = get_byte(cBuffer.get(), i*fBytesPerColor + 2);
|
|
|