Chromium Code Reviews| Index: src/codec/SkWebpCodec.cpp |
| diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp |
| index 3c61b937622097d5e1c5be483770a6fb2336543a..e8449f826a9232359b483ff430eedd5bbe366a1a 100644 |
| --- a/src/codec/SkWebpCodec.cpp |
| +++ b/src/codec/SkWebpCodec.cpp |
| @@ -20,16 +20,11 @@ |
| #include "webp/decode.h" |
| #include "webp/encode.h" |
| -bool SkWebpCodec::IsWebp(SkStream* stream) { |
| +bool SkWebpCodec::IsWebp(const char* bytes, size_t bytesRead) { |
| // WEBP starts with the following: |
| // RIFFXXXXWEBPVP |
| // Where XXXX is unspecified. |
| - const char LENGTH = 14; |
| - char bytes[LENGTH]; |
| - if (stream->read(&bytes, LENGTH) != LENGTH) { |
| - return false; |
| - } |
| - return !memcmp(bytes, "RIFF", 4) && !memcmp(&bytes[8], "WEBPVP", 6); |
| + return bytesRead >= 14 && !memcmp(bytes, "RIFF", 4) && !memcmp(&bytes[8], "WEBPVP", 6); |
| } |
| static const size_t WEBP_VP8_HEADER_SIZE = 30; |
| @@ -39,7 +34,11 @@ static const size_t WEBP_VP8_HEADER_SIZE = 30; |
| // bytes again. |
| static bool webp_parse_header(SkStream* stream, SkImageInfo* info) { |
| unsigned char buffer[WEBP_VP8_HEADER_SIZE]; |
| - if (!stream->peek(buffer, WEBP_VP8_HEADER_SIZE)) { |
| + const size_t bytesPeeked = stream->peek(buffer, WEBP_VP8_HEADER_SIZE); |
| + if (bytesPeeked != WEBP_VP8_HEADER_SIZE) { |
|
scroggo
2015/12/01 22:33:49
I should probably add a test for this. I forgot to
scroggo
2015/12/04 22:15:04
Added tests for this.
|
| + // Use read + rewind as a backup |
| + if (stream->read(buffer, WEBP_VP8_HEADER_SIZE) != WEBP_VP8_HEADER_SIZE |
| + || !stream->rewind()) |
| return false; |
| } |