aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/core/SkFlattenableBuffers.h17
1 files changed, 15 insertions, 2 deletions
diff --git a/include/core/SkFlattenableBuffers.h b/include/core/SkFlattenableBuffers.h
index 00cb77a8d3..aa61f21a7b 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;