Reverting r10651: Make WebP decoding independent of stream length.


git-svn-id: http://skia.googlecode.com/svn/trunk@10656 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/images/SkImageDecoder_libwebp.cpp b/src/images/SkImageDecoder_libwebp.cpp
index 4b5081b..b0fa7f7 100644
--- a/src/images/SkImageDecoder_libwebp.cpp
+++ b/src/images/SkImageDecoder_libwebp.cpp
@@ -203,27 +203,31 @@
         return false;
     }
 
-    bool success = true;
-    VP8StatusCode status = VP8_STATUS_SUSPENDED;
-    do {
-        const uint32_t bytesToRead = WEBP_IDECODE_BUFFER_SZ;
+    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);
         if (0 == bytesRead) {
-            success = false;
             break;
         }
 
-        status = WebPIAppend(idec, input, bytesRead);
-        if (VP8_STATUS_OK != status && VP8_STATUS_SUSPENDED != status) {
-            success = false;
+        VP8StatusCode status = WebPIAppend(idec, input, bytesRead);
+        if (VP8_STATUS_OK == status || VP8_STATUS_SUSPENDED == status) {
+            bytesRemaining -= bytesRead;
+        } else {
             break;
         }
-    } while (VP8_STATUS_OK != status);
+    }
     srcStorage.free();
     WebPIDelete(idec);
     WebPFreeDecBuffer(&config->output);
 
-    return success;
+    if (bytesRemaining > 0) {
+        return false;
+    } else {
+        return true;
+    }
 }
 
 static bool webp_get_config_resize(WebPDecoderConfig* config,