Index: src/images/SkImageDecoder_libwebp.cpp |
diff --git a/src/images/SkImageDecoder_libwebp.cpp b/src/images/SkImageDecoder_libwebp.cpp |
index b0fa7f7053d36d7050dbbd3fd407fa1329bead06..4b5081b436151b294680ba03ee97c932f8c85a69 100644 |
--- a/src/images/SkImageDecoder_libwebp.cpp |
+++ b/src/images/SkImageDecoder_libwebp.cpp |
@@ -203,31 +203,27 @@ static bool webp_idecode(SkStream* stream, WebPDecoderConfig* config) { |
return false; |
} |
- uint32_t bytesRemaining = contentSize; |
- while (bytesRemaining > 0) { |
- const uint32_t bytesToRead = (bytesRemaining < WEBP_IDECODE_BUFFER_SZ) ? |
- bytesRemaining : WEBP_IDECODE_BUFFER_SZ; |
+ bool success = true; |
+ VP8StatusCode status = VP8_STATUS_SUSPENDED; |
+ do { |
+ const uint32_t bytesToRead = WEBP_IDECODE_BUFFER_SZ; |
const size_t bytesRead = stream->read(input, bytesToRead); |
if (0 == bytesRead) { |
+ success = false; |
break; |
} |
- VP8StatusCode status = WebPIAppend(idec, input, bytesRead); |
- if (VP8_STATUS_OK == status || VP8_STATUS_SUSPENDED == status) { |
- bytesRemaining -= bytesRead; |
- } else { |
+ status = WebPIAppend(idec, input, bytesRead); |
+ if (VP8_STATUS_OK != status && VP8_STATUS_SUSPENDED != status) { |
+ success = false; |
break; |
} |
- } |
+ } while (VP8_STATUS_OK != status); |
srcStorage.free(); |
WebPIDelete(idec); |
WebPFreeDecBuffer(&config->output); |
- if (bytesRemaining > 0) { |
- return false; |
- } else { |
- return true; |
- } |
+ return success; |
} |
static bool webp_get_config_resize(WebPDecoderConfig* config, |