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 /include/core | |
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 'include/core')
-rw-r--r-- | include/core/SkPicture.h | 2 | ||||
-rw-r--r-- | include/core/SkStream.h | 43 |
2 files changed, 26 insertions, 19 deletions
diff --git a/include/core/SkPicture.h b/include/core/SkPicture.h index 1a5ecb360b..f0e9e0e731 100644 --- a/include/core/SkPicture.h +++ b/include/core/SkPicture.h @@ -174,6 +174,8 @@ private: static const uint32_t MIN_PICTURE_VERSION = 56; // august 2017 static const uint32_t CURRENT_PICTURE_VERSION = 62; + static_assert(MIN_PICTURE_VERSION <= 62, "Remove kFontAxes_bad from SkFontDescriptor.cpp"); + static bool IsValidPictInfo(const SkPictInfo& info); static sk_sp<SkPicture> Forwardport(const SkPictInfo&, const SkPictureData*, diff --git a/include/core/SkStream.h b/include/core/SkStream.h index 75fef125d9..2d9f9db120 100644 --- a/include/core/SkStream.h +++ b/include/core/SkStream.h @@ -83,17 +83,22 @@ public: */ virtual bool isAtEnd() const = 0; - int8_t readS8(); - int16_t readS16(); - int32_t readS32(); - - uint8_t readU8() { return (uint8_t)this->readS8(); } - uint16_t readU16() { return (uint16_t)this->readS16(); } - uint32_t readU32() { return (uint32_t)this->readS32(); } - - bool readBool() { return this->readU8() != 0; } - SkScalar readScalar(); - size_t readPackedUInt(); + bool SK_WARN_UNUSED_RESULT readS8(int8_t*); + bool SK_WARN_UNUSED_RESULT readS16(int16_t*); + bool SK_WARN_UNUSED_RESULT readS32(int32_t*); + + bool SK_WARN_UNUSED_RESULT readU8(uint8_t* i) { return this->readS8((int8_t*)i); } + bool SK_WARN_UNUSED_RESULT readU16(uint16_t* i) { return this->readS16((int16_t*)i); } + bool SK_WARN_UNUSED_RESULT readU32(uint32_t* i) { return this->readS32((int32_t*)i); } + + bool SK_WARN_UNUSED_RESULT readBool(bool* b) { + uint8_t i; + if (!this->readU8(&i)) { return false; } + *b = (i != 0); + return true; + } + bool SK_WARN_UNUSED_RESULT readScalar(SkScalar*); + bool SK_WARN_UNUSED_RESULT readPackedUInt(size_t*); //SkStreamRewindable /** Rewinds to the beginning of the stream. Returns true if the stream is known @@ -247,16 +252,16 @@ public: bool newline() { return this->write("\n", strlen("\n")); } - bool writeDecAsText(int32_t); - bool writeBigDecAsText(int64_t, int minDigits = 0); - bool writeHexAsText(uint32_t, int minDigits = 0); - bool writeScalarAsText(SkScalar); + bool writeDecAsText(int32_t); + bool writeBigDecAsText(int64_t, int minDigits = 0); + bool writeHexAsText(uint32_t, int minDigits = 0); + bool writeScalarAsText(SkScalar); - bool writeBool(bool v) { return this->write8(v); } - bool writeScalar(SkScalar); - bool writePackedUInt(size_t); + bool writeBool(bool v) { return this->write8(v); } + bool writeScalar(SkScalar); + bool writePackedUInt(size_t); - bool writeStream(SkStream* input, size_t length); + bool writeStream(SkStream* input, size_t length); /** * This returns the number of bytes in the stream required to store |