Index: blimp/client/feature/compositor/decoding_image_generator.cc |
diff --git a/blimp/client/feature/compositor/decoding_image_generator.cc b/blimp/client/feature/compositor/decoding_image_generator.cc |
index 692dd373c4df152e1de69054ca0deef64b44f5bd..5ceab09e2085793293b223b82b0325d29cec6ce0 100644 |
--- a/blimp/client/feature/compositor/decoding_image_generator.cc |
+++ b/blimp/client/feature/compositor/decoding_image_generator.cc |
@@ -4,7 +4,9 @@ |
#include "blimp/client/feature/compositor/decoding_image_generator.h" |
+#include "base/numerics/safe_conversions.h" |
#include "blimp/common/compositor/webp_decoder.h" |
+#include "blimp/common/proto/blob_cache.pb.h" |
#include "third_party/libwebp/webp/decode.h" |
#include "third_party/libwebp/webp/demux.h" |
#include "third_party/skia/include/core/SkData.h" |
@@ -13,16 +15,19 @@ namespace blimp { |
namespace client { |
SkImageGenerator* DecodingImageGenerator::create(SkData* data) { |
- WebPData inputData = {reinterpret_cast<const uint8_t*>(data->data()), |
- data->size()}; |
- WebPDemuxState demuxState(WEBP_DEMUX_PARSING_HEADER); |
- WebPDemuxer* demux = WebPDemuxPartial(&inputData, &demuxState); |
- |
- uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH); |
- uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT); |
+ BlobCacheImageMetadata parsed_metadata; |
+ int signed_size = base::checked_cast<int>(data->size()); |
+ if (!parsed_metadata.ParseFromArray(data->data(), signed_size)) { |
+ // Failed to parse proto, so will fail to decode later as well. Inform |
+ // Skia by giving back an empty SkImageInfo. |
+ return new DecodingImageGenerator(SkImageInfo::MakeN32Premul(0, 0), |
+ data->data(), data->size()); |
+ } |
- const SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); |
- return new DecodingImageGenerator(info, data->data(), data->size()); |
+ return new DecodingImageGenerator( |
+ SkImageInfo::MakeN32Premul(parsed_metadata.width(), |
+ parsed_metadata.height()), |
+ data->data(), data->size()); |
} |
DecodingImageGenerator::DecodingImageGenerator(const SkImageInfo info, |