diff options
Diffstat (limited to 'src/effects')
-rw-r--r-- | src/effects/SkBicubicImageFilter.cpp | 4 | ||||
-rw-r--r-- | src/effects/SkBlurImageFilter.cpp | 4 | ||||
-rw-r--r-- | src/effects/SkColorFilters.cpp | 2 | ||||
-rw-r--r-- | src/effects/SkColorMatrixFilter.cpp | 3 | ||||
-rw-r--r-- | src/effects/SkDisplacementMapEffect.cpp | 17 | ||||
-rw-r--r-- | src/effects/SkDropShadowImageFilter.cpp | 3 | ||||
-rw-r--r-- | src/effects/SkLightingImageFilter.cpp | 11 | ||||
-rw-r--r-- | src/effects/SkMagnifierImageFilter.cpp | 3 | ||||
-rw-r--r-- | src/effects/SkMatrixConvolutionImageFilter.cpp | 19 | ||||
-rwxr-xr-x | src/effects/SkMergeImageFilter.cpp | 7 | ||||
-rw-r--r-- | src/effects/SkMorphologyImageFilter.cpp | 4 | ||||
-rw-r--r-- | src/effects/SkOffsetImageFilter.cpp | 2 | ||||
-rw-r--r-- | src/effects/SkRectShaderImageFilter.cpp | 2 | ||||
-rwxr-xr-x | src/effects/SkTestImageFilters.cpp | 1 |
14 files changed, 81 insertions, 1 deletions
diff --git a/src/effects/SkBicubicImageFilter.cpp b/src/effects/SkBicubicImageFilter.cpp index 0ffcde6e2e..b7dffb8bc8 100644 --- a/src/effects/SkBicubicImageFilter.cpp +++ b/src/effects/SkBicubicImageFilter.cpp @@ -45,6 +45,10 @@ SkBicubicImageFilter::SkBicubicImageFilter(SkFlattenableReadBuffer& buffer) : IN SkASSERT(readSize == 16); fScale.fWidth = buffer.readScalar(); fScale.fHeight = buffer.readScalar(); + buffer.validate(SkScalarIsFinite(fScale.fWidth) && + SkScalarIsFinite(fScale.fHeight) && + (fScale.fWidth >= 0) && + (fScale.fHeight >= 0)); } void SkBicubicImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { diff --git a/src/effects/SkBlurImageFilter.cpp b/src/effects/SkBlurImageFilter.cpp index 3f97ddd59a..10f389095f 100644 --- a/src/effects/SkBlurImageFilter.cpp +++ b/src/effects/SkBlurImageFilter.cpp @@ -19,6 +19,10 @@ SkBlurImageFilter::SkBlurImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { fSigma.fWidth = buffer.readScalar(); fSigma.fHeight = buffer.readScalar(); + buffer.validate(SkScalarIsFinite(fSigma.fWidth) && + SkScalarIsFinite(fSigma.fHeight) && + (fSigma.fWidth >= 0) && + (fSigma.fHeight >= 0)); } SkBlurImageFilter::SkBlurImageFilter(SkScalar sigmaX, diff --git a/src/effects/SkColorFilters.cpp b/src/effects/SkColorFilters.cpp index 41a201ef39..7373f004d5 100644 --- a/src/effects/SkColorFilters.cpp +++ b/src/effects/SkColorFilters.cpp @@ -13,6 +13,7 @@ #include "SkFlattenableBuffers.h" #include "SkUtils.h" #include "SkString.h" +#include "SkValidationUtils.h" #define ILLEGAL_XFERMODE_MODE ((SkXfermode::Mode)-1) @@ -98,6 +99,7 @@ protected: fColor = buffer.readColor(); fMode = (SkXfermode::Mode)buffer.readUInt(); this->updateCache(); + buffer.validate(SkIsValidMode(fMode)); } private: diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp index 1f841d0489..842d372296 100644 --- a/src/effects/SkColorMatrixFilter.cpp +++ b/src/effects/SkColorMatrixFilter.cpp @@ -310,6 +310,9 @@ SkColorMatrixFilter::SkColorMatrixFilter(SkFlattenableReadBuffer& buffer) SkASSERT(buffer.getArrayCount() == 20); buffer.readScalarArray(fMatrix.fMat); this->initState(fMatrix.fMat); + for (int i = 0; i < 20; ++i) { + buffer.validate(SkScalarIsFinite(fMatrix.fMat[0])); + } } bool SkColorMatrixFilter::asColorMatrix(SkScalar matrix[20]) const { diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp index a751365b75..11bd567c7c 100644 --- a/src/effects/SkDisplacementMapEffect.cpp +++ b/src/effects/SkDisplacementMapEffect.cpp @@ -128,6 +128,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 /////////////////////////////////////////////////////////////////////////////// @@ -153,6 +167,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 { diff --git a/src/effects/SkDropShadowImageFilter.cpp b/src/effects/SkDropShadowImageFilter.cpp index 75a86689c0..4fc29bae83 100644 --- a/src/effects/SkDropShadowImageFilter.cpp +++ b/src/effects/SkDropShadowImageFilter.cpp @@ -29,6 +29,9 @@ SkDropShadowImageFilter::SkDropShadowImageFilter(SkFlattenableReadBuffer& buffer fDy = buffer.readScalar(); fSigma = buffer.readScalar(); fColor = buffer.readColor(); + buffer.validate(SkScalarIsFinite(fDx) && + SkScalarIsFinite(fDy) && + SkScalarIsFinite(fSigma)); } void SkDropShadowImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp index ecf9913d2a..5460559aac 100644 --- a/src/effects/SkLightingImageFilter.cpp +++ b/src/effects/SkLightingImageFilter.cpp @@ -249,6 +249,9 @@ SkPoint3 readPoint3(SkFlattenableReadBuffer& buffer) { point.fX = buffer.readScalar(); point.fY = buffer.readScalar(); point.fZ = buffer.readScalar(); + buffer.validate(SkScalarIsFinite(point.fX) && + SkScalarIsFinite(point.fY) && + SkScalarIsFinite(point.fZ)); return point; }; @@ -741,6 +744,10 @@ protected: fCosInnerConeAngle = buffer.readScalar(); fConeScale = buffer.readScalar(); fS = readPoint3(buffer); + buffer.validate(SkScalarIsFinite(fSpecularExponent) && + SkScalarIsFinite(fCosOuterConeAngle) && + SkScalarIsFinite(fCosInnerConeAngle) && + SkScalarIsFinite(fConeScale)); } SkSpotLight(const SkPoint3& location, const SkPoint3& target, SkScalar specularExponent, SkScalar cosOuterConeAngle, SkScalar cosInnerConeAngle, SkScalar coneScale, const SkPoint3& s, const SkPoint3& color) : INHERITED(color), @@ -862,6 +869,7 @@ SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) { fLight = buffer.readFlattenableT<SkLight>(); fSurfaceScale = buffer.readScalar(); + buffer.validate(SkScalarIsFinite(fSurfaceScale)); } void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { @@ -882,6 +890,7 @@ SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff : INHERITED(buffer) { fKD = buffer.readScalar(); + buffer.validate(SkScalarIsFinite(fKD)); } void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { @@ -959,6 +968,8 @@ SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu { fKS = buffer.readScalar(); fShininess = buffer.readScalar(); + buffer.validate(SkScalarIsFinite(fKS) && + SkScalarIsFinite(fShininess)); } void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp index c74b067267..3edd490b3a 100644 --- a/src/effects/SkMagnifierImageFilter.cpp +++ b/src/effects/SkMagnifierImageFilter.cpp @@ -9,6 +9,7 @@ #include "SkMagnifierImageFilter.h" #include "SkColorPriv.h" #include "SkFlattenableBuffers.h" +#include "SkValidationUtils.h" //////////////////////////////////////////////////////////////////////////////// #if SK_SUPPORT_GPU @@ -252,6 +253,8 @@ SkMagnifierImageFilter::SkMagnifierImageFilter(SkFlattenableReadBuffer& buffer) float height = buffer.readScalar(); fSrcRect = SkRect::MakeXYWH(x, y, width, height); fInset = buffer.readScalar(); + + buffer.validate(SkIsValidRect(fSrcRect) && SkScalarIsFinite(fInset)); } // FIXME: implement single-input semantics diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp index 9446b8ee19..dab890f01a 100644 --- a/src/effects/SkMatrixConvolutionImageFilter.cpp +++ b/src/effects/SkMatrixConvolutionImageFilter.cpp @@ -22,6 +22,22 @@ #endif +namespace { + +bool TileModeIsValid(SkMatrixConvolutionImageFilter::TileMode tileMode) { + switch (tileMode) { + case SkMatrixConvolutionImageFilter::kClamp_TileMode: + case SkMatrixConvolutionImageFilter::kRepeat_TileMode: + case SkMatrixConvolutionImageFilter::kClampToBlack_TileMode: + return true; + default: + break; + } + return false; +} + +} + SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(const SkISize& kernelSize, const SkScalar* kernel, SkScalar gain, SkScalar bias, const SkIPoint& target, TileMode tileMode, bool convolveAlpha, SkImageFilter* input) : INHERITED(input), fKernelSize(kernelSize), @@ -51,6 +67,9 @@ SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(SkFlattenableRead fTarget.fY = buffer.readInt(); fTileMode = (TileMode) buffer.readInt(); fConvolveAlpha = buffer.readBool(); + buffer.validate(SkScalarIsFinite(fGain) && + SkScalarIsFinite(fBias) && + TileModeIsValid(fTileMode)); } void SkMatrixConvolutionImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { diff --git a/src/effects/SkMergeImageFilter.cpp b/src/effects/SkMergeImageFilter.cpp index 0c47c91aff..06040fdd40 100755 --- a/src/effects/SkMergeImageFilter.cpp +++ b/src/effects/SkMergeImageFilter.cpp @@ -9,6 +9,7 @@ #include "SkCanvas.h" #include "SkDevice.h" #include "SkFlattenableBuffers.h" +#include "SkValidationUtils.h" /////////////////////////////////////////////////////////////////////////////// @@ -157,8 +158,12 @@ SkMergeImageFilter::SkMergeImageFilter(SkFlattenableReadBuffer& buffer) : INHERI bool hasModes = buffer.readBool(); if (hasModes) { this->initAllocModes(); - SkASSERT(buffer.getArrayCount() == countInputs() * sizeof(fModes[0])); + int nbInputs = countInputs(); + SkASSERT(buffer.getArrayCount() == nbInputs * sizeof(fModes[0])); buffer.readByteArray(fModes); + for (int i = 0; i < nbInputs; ++i) { + buffer.validate(SkIsValidMode((SkXfermode::Mode)fModes[i])); + } } else { fModes = 0; } diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp index 83157bef6e..ecc8074b0c 100644 --- a/src/effects/SkMorphologyImageFilter.cpp +++ b/src/effects/SkMorphologyImageFilter.cpp @@ -24,6 +24,10 @@ SkMorphologyImageFilter::SkMorphologyImageFilter(SkFlattenableReadBuffer& buffer : INHERITED(buffer) { fRadius.fWidth = buffer.readInt(); fRadius.fHeight = buffer.readInt(); + buffer.validate(SkScalarIsFinite(fRadius.fWidth) && + SkScalarIsFinite(fRadius.fHeight) && + (fRadius.fWidth >= 0) && + (fRadius.fHeight >= 0)); } SkMorphologyImageFilter::SkMorphologyImageFilter(int radiusX, int radiusY, SkImageFilter* input) diff --git a/src/effects/SkOffsetImageFilter.cpp b/src/effects/SkOffsetImageFilter.cpp index ad5e49d776..2246537ac4 100644 --- a/src/effects/SkOffsetImageFilter.cpp +++ b/src/effects/SkOffsetImageFilter.cpp @@ -50,4 +50,6 @@ SkOffsetImageFilter::SkOffsetImageFilter(SkScalar dx, SkScalar dy, SkOffsetImageFilter::SkOffsetImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { buffer.readPoint(&fOffset); + buffer.validate(SkScalarIsFinite(fOffset.fX) && + SkScalarIsFinite(fOffset.fY)); } diff --git a/src/effects/SkRectShaderImageFilter.cpp b/src/effects/SkRectShaderImageFilter.cpp index 2ee1d4a2ed..3099ad442a 100644 --- a/src/effects/SkRectShaderImageFilter.cpp +++ b/src/effects/SkRectShaderImageFilter.cpp @@ -11,6 +11,7 @@ #include "SkDevice.h" #include "SkFlattenableBuffers.h" #include "SkShader.h" +#include "SkValidationUtils.h" SkRectShaderImageFilter* SkRectShaderImageFilter::Create(SkShader* s, const SkRect& rect) { SkASSERT(s); @@ -29,6 +30,7 @@ SkRectShaderImageFilter::SkRectShaderImageFilter(SkFlattenableReadBuffer& buffer : INHERITED(buffer) { fShader = buffer.readFlattenableT<SkShader>(); buffer.readRect(&fRect); + buffer.validate(SkIsValidRect(fRect)); } void SkRectShaderImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { diff --git a/src/effects/SkTestImageFilters.cpp b/src/effects/SkTestImageFilters.cpp index 788c33a411..d0e21a3920 100755 --- a/src/effects/SkTestImageFilters.cpp +++ b/src/effects/SkTestImageFilters.cpp @@ -78,4 +78,5 @@ void SkDownSampleImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { SkDownSampleImageFilter::SkDownSampleImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { fScale = buffer.readScalar(); + buffer.validate(SkScalarIsFinite(fScale)); } |