| Index: src/effects/SkDisplacementMapEffect.cpp | 
| diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp | 
| index 3722178c29863e6264f40c15a0b82539ce21ea49..2258c3234db7552216e5a2d3841a2591ec5f80e3 100644 | 
| --- a/src/effects/SkDisplacementMapEffect.cpp | 
| +++ b/src/effects/SkDisplacementMapEffect.cpp | 
| @@ -126,6 +126,20 @@ void computeDisplacement(SkDisplacementMapEffect::ChannelSelectorType xChannelSe | 
| } | 
| } | 
|  | 
| +bool ChannelSelectorTypeIsValid(SkDisplacementMapEffect::ChannelSelectorType channelSelector) { | 
| +    switch (channelSelector) { | 
| +    case SkDisplacementMapEffect::kUnknown_ChannelSelectorType: | 
| +    case SkDisplacementMapEffect::kR_ChannelSelectorType: | 
| +    case SkDisplacementMapEffect::kG_ChannelSelectorType: | 
| +    case SkDisplacementMapEffect::kB_ChannelSelectorType: | 
| +    case SkDisplacementMapEffect::kA_ChannelSelectorType: | 
| +        return true; | 
| +    default: | 
| +        break; | 
| +    } | 
| +    return false; | 
| +} | 
| + | 
| } // end namespace | 
|  | 
| /////////////////////////////////////////////////////////////////////////////// | 
| @@ -152,6 +166,9 @@ SkDisplacementMapEffect::SkDisplacementMapEffect(SkFlattenableReadBuffer& buffer | 
| fXChannelSelector = (SkDisplacementMapEffect::ChannelSelectorType) buffer.readInt(); | 
| fYChannelSelector = (SkDisplacementMapEffect::ChannelSelectorType) buffer.readInt(); | 
| fScale            = buffer.readScalar(); | 
| +    buffer.validate(ChannelSelectorTypeIsValid(fXChannelSelector) && | 
| +                    ChannelSelectorTypeIsValid(fYChannelSelector) && | 
| +                    SkScalarIsFinite(fScale)); | 
| } | 
|  | 
| void SkDisplacementMapEffect::flatten(SkFlattenableWriteBuffer& buffer) const { | 
|  |