aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/codec/SkBmpStandardCodec.cpp
diff options
context:
space:
mode:
authorGravatar msarett <msarett@google.com>2016-05-04 13:03:48 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-05-04 13:03:48 -0700
commit3e375b0a51a46814cf08ecd1a513862006a704e5 (patch)
treeb3cdfbd65951301fa0ec048303497e93825b7a01 /src/codec/SkBmpStandardCodec.cpp
parent76948d4faaca9fd7730576e2f79790ca8d93c10b (diff)
Fix ICO bug exposed by the fuzzer
Diffstat (limited to 'src/codec/SkBmpStandardCodec.cpp')
-rw-r--r--src/codec/SkBmpStandardCodec.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/codec/SkBmpStandardCodec.cpp b/src/codec/SkBmpStandardCodec.cpp
index 358da057c6..651ff83b8a 100644
--- a/src/codec/SkBmpStandardCodec.cpp
+++ b/src/codec/SkBmpStandardCodec.cpp
@@ -150,13 +150,18 @@ SkCodec::Result SkBmpStandardCodec::onGetPixels(const SkImageInfo& dstInfo,
}
void SkBmpStandardCodec::initializeSwizzler(const SkImageInfo& dstInfo, const Options& opts) {
- // In the case of paletted ico-in-bmps, we will report BGRA to the client,
- // since we may be required to apply an alpha mask after the decode. But
- // the swizzler needs to know the actual format of the bmp.
+ // In the case of bmp-in-icos, we will report BGRA to the client,
+ // since we may be required to apply an alpha mask after the decode.
+ // However, the swizzler needs to know the actual format of the bmp.
SkEncodedInfo swizzlerInfo = this->getEncodedInfo();
- if (fInIco && this->bitsPerPixel() <= 8) {
- swizzlerInfo = SkEncodedInfo::Make(SkEncodedInfo::kPalette_Color, swizzlerInfo.alpha(),
- this->bitsPerPixel());
+ if (fInIco) {
+ if (this->bitsPerPixel() <= 8) {
+ swizzlerInfo = SkEncodedInfo::Make(SkEncodedInfo::kPalette_Color,
+ swizzlerInfo.alpha(), this->bitsPerPixel());
+ } else if (this->bitsPerPixel() == 24) {
+ swizzlerInfo = SkEncodedInfo::Make(SkEncodedInfo::kBGR_Color,
+ SkEncodedInfo::kOpaque_Alpha, 8);
+ }
}
// Get a pointer to the color table if it exists