Index: src/core/SkPicturePlayback.cpp |
diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp |
index 898d37957811392393f4f7e756422e991ab5cc32..1a5e517498f72699ac4bdd88c49d40118ac8ca1a 100644 |
--- a/src/core/SkPicturePlayback.cpp |
+++ b/src/core/SkPicturePlayback.cpp |
@@ -520,15 +520,20 @@ void SkPicturePlayback::parseStreamTag(SkStream* stream, const SkPictInfo& info, |
case PICT_PICTURE_TAG: { |
fPictureCount = size; |
fPictureRefs = SkNEW_ARRAY(SkPicture*, fPictureCount); |
- bool success; |
for (int i = 0; i < fPictureCount; i++) { |
- fPictureRefs[i] = SkNEW_ARGS(SkPicture, (stream, &success, proc)); |
- // Success can only be false if PICTURE_VERSION does not match |
+ fPictureRefs[i] = SkPicture::CreateFromStream(stream, proc); |
robertphillips
2013/06/24 17:22:09
I don't think this comment is true.
scroggo
2013/06/24 18:22:19
How else can it fail?
|
+ // CreateFromStream can only fail if PICTURE_VERSION does not match |
// (which should never happen from here, since a sub picture will |
// have the same PICTURE_VERSION as its parent) or if stream->read |
// returns 0. In the latter case, we have a bug when writing the |
// picture to begin with, which will be alerted to here. |
- SkASSERT(success); |
+ SkASSERT(fPictureRefs[i] != NULL); |
+ if (NULL == fPictureRefs[i]) { |
+ // Delete the array |
robertphillips
2013/06/24 17:22:09
Don't we need to also loop backwards across the ar
scroggo
2013/06/24 18:22:19
Yes. Done.
|
+ SkDELETE_ARRAY(fPictureRefs); |
+ fPictureCount = 0; |
+ return; |
+ } |
} |
} break; |
case PICT_BUFFER_SIZE_TAG: { |