diff options
author | Ben Wagner <bungeman@google.com> | 2016-10-07 15:50:53 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-18 15:06:24 +0000 |
commit | 255ab8d9a55d68b7405280dae6b586d17e23cf71 (patch) | |
tree | 06625e0edb3314d6dff3d1cb2bf13d116b6cba3f /src/core/SkPictureData.cpp | |
parent | 8f8d481b44fc486e7190c6e2db8077226d53c969 (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.cpp | 11 |
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 } |