| Index: include/core/SkFlattenableBuffers.h
|
| diff --git a/include/core/SkFlattenableBuffers.h b/include/core/SkFlattenableBuffers.h
|
| index 00cb77a8d35f1ba98e80493767c081764f4d51d0..aa61f21a7b2d57ac0c14848cfa37e8aaec7d5b35 100644
|
| --- a/include/core/SkFlattenableBuffers.h
|
| +++ b/include/core/SkFlattenableBuffers.h
|
| @@ -139,8 +139,13 @@ public:
|
|
|
| SkData* readByteArrayAsData() {
|
| size_t len = this->getArrayCount();
|
| - void* buffer = sk_malloc_throw(len);
|
| - (void)this->readByteArray(buffer, len);
|
| + void* buffer = NULL;
|
| + if (this->validateAvailable(len)) {
|
| + buffer = sk_malloc_throw(len);
|
| + (void)this->readByteArray(buffer, len);
|
| + } else {
|
| + len = 0;
|
| + }
|
| return SkData::NewFromMalloc(buffer, len);
|
| }
|
|
|
| @@ -160,6 +165,14 @@ public:
|
| */
|
| virtual bool isValid() const { return true; }
|
|
|
| + /** This function returns true by default
|
| + * If isValidating() is true, it will return whether there's
|
| + * at least "size" memory left to read in the stream.
|
| + *
|
| + * @param size amount of memory that should still be available
|
| + */
|
| + virtual bool validateAvailable(size_t size) { return true; }
|
| +
|
| private:
|
| template <typename T> T* readFlattenableT();
|
| uint32_t fFlags;
|
|
|