| Index: src/images/SkImageDecoder_libico.cpp
|
| diff --git a/src/images/SkImageDecoder_libico.cpp b/src/images/SkImageDecoder_libico.cpp
|
| index 195b6ff08b9338ee4c4502b4efb6f5b5a2c31785..04978b00c19333b8b37ed3c3eda0248086f68605 100644
|
| --- a/src/images/SkImageDecoder_libico.cpp
|
| +++ b/src/images/SkImageDecoder_libico.cpp
|
| @@ -152,6 +152,20 @@ bool SkICOImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode)
|
| int offset = read4Bytes(buf, 18 + choice*16);
|
| if ((size_t)(offset + size) > length)
|
| return false;
|
| +
|
| + // Check to see if this is a PNG image inside the ICO
|
| + {
|
| + SkMemoryStream subStream(buf + offset, size, false);
|
| + SkAutoTDelete<SkImageDecoder> otherDecoder(SkImageDecoder::Factory(&subStream));
|
| + if (otherDecoder.get() != NULL) {
|
| + // Set fields on the other decoder to be the same as this one.
|
| + this->copyFieldsToOther(otherDecoder.get());
|
| + if(otherDecoder->decode(&subStream, bm, this->getDefaultPref(), mode)) {
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| +
|
| //int infoSize = read4Bytes(buf, offset); //40
|
| //int width = read4Bytes(buf, offset+4); //should == w
|
| //int height = read4Bytes(buf, offset+8); //should == 2*h
|
|
|