| 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 {
|
|
|