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; |