diff options
Diffstat (limited to 'src/core/SkPictureFlat.h')
-rw-r--r-- | src/core/SkPictureFlat.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/core/SkPictureFlat.h b/src/core/SkPictureFlat.h index 1ac91b7ab5..3489043c61 100644 --- a/src/core/SkPictureFlat.h +++ b/src/core/SkPictureFlat.h @@ -133,8 +133,17 @@ static inline uint32_t ClipParams_pack(SkClipOp op, bool doAA) { return (doAABit << 4) | static_cast<int>(op); } -static inline SkClipOp ClipParams_unpackRegionOp(uint32_t packed) { - return (SkClipOp)(packed & 0xF); +template <typename T> T asValidEnum(SkReadBuffer* buffer, uint32_t candidate) { + + if (buffer->validate(candidate <= static_cast<uint32_t>(T::kMax_EnumValue))) { + return static_cast<T>(candidate); + } + + return T::kMax_EnumValue; +} + +static inline SkClipOp ClipParams_unpackRegionOp(SkReadBuffer* buffer, uint32_t packed) { + return asValidEnum<SkClipOp>(buffer, packed & 0xF); } static inline bool ClipParams_unpackDoAA(uint32_t packed) { |