Check enum values in SkDisplacementMapEffect's CreateProc

Bug: skia:5635
Change-Id: Iaa01d2207916d0e2a2e2623f124b2b4023b51b1b
Reviewed-on: https://skia-review.googlesource.com/99204
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Mike Reed <reed@google.com>
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 14a1f66..3fabb4d 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -11,6 +11,7 @@
 #include "SkColorSpaceXformer.h"
 #include "SkImageFilterPriv.h"
 #include "SkReadBuffer.h"
+#include "SkSafeRange.h"
 #include "SkSpecialImage.h"
 #include "SkWriteBuffer.h"
 #include "SkUnPreMultiply.h"
@@ -146,10 +147,21 @@
 }
 
 sk_sp<SkFlattenable> SkDisplacementMapEffect::CreateProc(SkReadBuffer& buffer) {
+    SkSafeRange safe;
+
     SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 2);
-    ChannelSelectorType xsel = (ChannelSelectorType)buffer.readInt();
-    ChannelSelectorType ysel = (ChannelSelectorType)buffer.readInt();
+
+    ChannelSelectorType xsel = safe.checkLE<ChannelSelectorType>(buffer.readInt(),
+                                                                 kLast_ChannelSelectorType);
+    ChannelSelectorType ysel = safe.checkLE<ChannelSelectorType>(buffer.readInt(),
+                                                                 kLast_ChannelSelectorType);
+
     SkScalar scale = buffer.readScalar();
+
+    if (!buffer.validate(safe)) {
+        return nullptr;
+    }
+
     return Make(xsel, ysel, scale,
                 common.getInput(0), common.getInput(1),
                 &common.cropRect());