aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkPictureFlat.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkPictureFlat.h')
-rw-r--r--src/core/SkPictureFlat.h13
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) {