diff --git a/src/images/SkImageDecoder_libwebp.cpp b/src/images/SkImageDecoder_libwebp.cpp index b0fa7f7053..4691d0d13e 100644 --- a/src/images/SkImageDecoder_libwebp.cpp +++ b/src/images/SkImageDecoder_libwebp.cpp @@ -203,31 +203,26 @@ 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; - const size_t bytesRead = stream->read(input, bytesToRead); + bool success = true; + VP8StatusCode status = VP8_STATUS_SUSPENDED; + do { + const size_t bytesRead = stream->read(input, readBufferSize); 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,