Index: src/effects/SkLightingImageFilter.cpp |
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp |
index aac54625fee1a6197f125e4dee9f95eda7b0b704..1d4c8d4bf9030a7a1954a66b395e115f8e667696 100644 |
--- a/src/effects/SkLightingImageFilter.cpp |
+++ b/src/effects/SkLightingImageFilter.cpp |
@@ -248,6 +248,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; |
}; |
@@ -526,6 +529,8 @@ public: |
virtual bool requiresFragmentPosition() const = 0; |
virtual SkLight* transform(const SkMatrix& matrix) const = 0; |
+ SK_DEFINE_FLATTENABLE_TYPE(SkLight) |
+ |
protected: |
SkLight(SkColor color) |
: fColor(SkIntToScalar(SkColorGetR(color)), |
@@ -740,6 +745,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), |
@@ -861,7 +870,7 @@ SkImageFilter* SkLightingImageFilter::CreateSpotLitSpecular( |
} |
SkLightingImageFilter::~SkLightingImageFilter() { |
- fLight->unref(); |
+ SkSafeUnref(fLight); |
} |
SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) |
@@ -869,6 +878,7 @@ SkLightingImageFilter::SkLightingImageFilter(SkFlattenableReadBuffer& buffer) |
{ |
fLight = buffer.readFlattenableT<SkLight>(); |
fSurfaceScale = buffer.readScalar(); |
+ buffer.validate(SkScalarIsFinite(fSurfaceScale)); |
} |
void SkLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { |
@@ -889,6 +899,7 @@ SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(SkFlattenableReadBuff |
: INHERITED(buffer) |
{ |
fKD = buffer.readScalar(); |
+ buffer.validate(SkScalarIsFinite(fKD)); |
} |
void SkDiffuseLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { |
@@ -966,6 +977,8 @@ SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkFlattenableReadBu |
{ |
fKS = buffer.readScalar(); |
fShininess = buffer.readScalar(); |
+ buffer.validate(SkScalarIsFinite(fKS) && |
+ SkScalarIsFinite(fShininess)); |
} |
void SkSpecularLightingImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const { |