aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkPictureData.cpp
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2016-10-07 15:50:53 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-18 15:06:24 +0000
commit255ab8d9a55d68b7405280dae6b586d17e23cf71 (patch)
tree06625e0edb3314d6dff3d1cb2bf13d116b6cba3f /src/core/SkPictureData.cpp
parent8f8d481b44fc486e7190c6e2db8077226d53c969 (diff)
Make SkStream readers report failure.
This also fixes an issue noticed while making this change where SkFontDescriptor improperly round trips negative axis values. Change-Id: Iacc5929a185659dcacc18c802c4908e4f34c6899 Reviewed-on: https://skia-review.googlesource.com/128341 Commit-Queue: Ben Wagner <bungeman@google.com> Reviewed-by: Leon Scroggins <scroggo@google.com>
Diffstat (limited to 'src/core/SkPictureData.cpp')
-rw-r--r--src/core/SkPictureData.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/core/SkPictureData.cpp b/src/core/SkPictureData.cpp
index efd41837d9..6be36dd1d2 100644
--- a/src/core/SkPictureData.cpp
+++ b/src/core/SkPictureData.cpp
@@ -276,11 +276,12 @@ bool SkPictureData::parseStreamTag(SkStream* stream,
break;
case SK_PICT_FACTORY_TAG: {
SkASSERT(!haveBuffer);
- size = stream->readU32();
+ if (!stream->readU32(&size)) { return false; }
fFactoryPlayback = skstd::make_unique<SkFactoryPlayback>(size);
for (size_t i = 0; i < size; i++) {
SkString str;
- const size_t len = stream->readPackedUInt();
+ size_t len;
+ if (!stream->readPackedUInt(&len)) { return false; }
str.resize(len);
if (stream->read(str.writable_str(), len) != len) {
return false;
@@ -480,12 +481,14 @@ bool SkPictureData::parseStream(SkStream* stream,
const SkDeserialProcs& procs,
SkTypefacePlayback* topLevelTFPlayback) {
for (;;) {
- uint32_t tag = stream->readU32();
+ uint32_t tag;
+ if (!stream->readU32(&tag)) { return false; }
if (SK_PICT_EOF_TAG == tag) {
break;
}
- uint32_t size = stream->readU32();
+ uint32_t size;
+ if (!stream->readU32(&size)) { return false; }
if (!this->parseStreamTag(stream, tag, size, procs, topLevelTFPlayback)) {
return false; // we're invalid
}