| Index: src/codec/SkWbmpCodec.cpp
|
| diff --git a/src/codec/SkWbmpCodec.cpp b/src/codec/SkWbmpCodec.cpp
|
| index af1ab46f730c9375cf111b2914081ddcf88d6bfe..706d5ddd460e4dc7b6764512e0de776f4da0fe41 100644
|
| --- a/src/codec/SkWbmpCodec.cpp
|
| +++ b/src/codec/SkWbmpCodec.cpp
|
| @@ -30,6 +30,19 @@ static inline void setup_color_table(SkColorType colorType,
|
| }
|
| }
|
|
|
| +static inline bool valid_color_type(SkColorType colorType, SkAlphaType alphaType) {
|
| + switch (colorType) {
|
| + case kN32_SkColorType:
|
| + case kIndex_8_SkColorType:
|
| + return true;
|
| + case kGray_8_SkColorType:
|
| + case kRGB_565_SkColorType:
|
| + return kOpaque_SkAlphaType == alphaType;
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +
|
| static bool read_byte(SkStream* stream, uint8_t* data)
|
| {
|
| return stream->read(data, 1) == 1;
|
| @@ -84,16 +97,6 @@ bool SkWbmpCodec::onRewind() {
|
|
|
| SkSwizzler* SkWbmpCodec::initializeSwizzler(const SkImageInfo& info, const SkPMColor* ctable,
|
| const Options& opts) {
|
| - // Create the swizzler based on the desired color type
|
| - switch (info.colorType()) {
|
| - case kIndex_8_SkColorType:
|
| - case kN32_SkColorType:
|
| - case kRGB_565_SkColorType:
|
| - case kGray_8_SkColorType:
|
| - break;
|
| - default:
|
| - return nullptr;
|
| - }
|
| return SkSwizzler::CreateSwizzler(SkSwizzler::kBit, ctable, info, opts);
|
| }
|
|
|
| @@ -124,7 +127,8 @@ SkCodec::Result SkWbmpCodec::onGetPixels(const SkImageInfo& info,
|
| return kUnimplemented;
|
| }
|
|
|
| - if (!valid_alpha(info.alphaType(), this->getInfo().alphaType())) {
|
| + if (!valid_color_type(info.colorType(), info.alphaType()) ||
|
| + !valid_alpha(info.alphaType(), this->getInfo().alphaType())) {
|
| return kInvalidConversion;
|
| }
|
|
|
| @@ -133,9 +137,7 @@ SkCodec::Result SkWbmpCodec::onGetPixels(const SkImageInfo& info,
|
|
|
| // Initialize the swizzler
|
| SkAutoTDelete<SkSwizzler> swizzler(this->initializeSwizzler(info, ctable, options));
|
| - if (nullptr == swizzler.get()) {
|
| - return kInvalidConversion;
|
| - }
|
| + SkASSERT(swizzler);
|
|
|
| // Perform the decode
|
| SkISize size = info.dimensions();
|
| @@ -193,7 +195,8 @@ SkCodec::Result SkWbmpCodec::onStartScanlineDecode(const SkImageInfo& dstInfo,
|
| return kUnimplemented;
|
| }
|
|
|
| - if (!valid_alpha(dstInfo.alphaType(), this->getInfo().alphaType())) {
|
| + if (!valid_color_type(dstInfo.colorType(), dstInfo.alphaType()) ||
|
| + !valid_alpha(dstInfo.alphaType(), this->getInfo().alphaType())) {
|
| return kInvalidConversion;
|
| }
|
|
|
| @@ -207,9 +210,7 @@ SkCodec::Result SkWbmpCodec::onStartScanlineDecode(const SkImageInfo& dstInfo,
|
|
|
| // Initialize the swizzler
|
| fSwizzler.reset(this->initializeSwizzler(dstInfo, get_color_ptr(fColorTable.get()), options));
|
| - if (nullptr == fSwizzler.get()) {
|
| - return kInvalidConversion;
|
| - }
|
| + SkASSERT(fSwizzler);
|
|
|
| fSrcBuffer.reset(fSrcRowBytes);
|
|
|
|
|