aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Phillips <robertphillips@google.com>2018-01-24 14:46:38 -0500
committerSkia Commit-Bot <skia-commit-bot@chromium.org>2018-01-24 21:54:30 +0000
commita83d0132baa681339e7e7f018dbdcc4051caae3d (patch)
treee9be321a81d04cc28a5c388a6f8a8f76ee5a1224 /src
parent548d387ab935349edd03149502fff8ebe467b5b0 (diff)
downloadskqp-a83d0132baa681339e7e7f018dbdcc4051caae3d.tar.gz
Misc guarding of enums in ImageFilter CreateProcs
Change-Id: I51886aaf2a4670f46ca489b2369dc00e60403c75 Reviewed-on: https://skia-review.googlesource.com/99328 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/SkBlurImageFilter.cpp4
-rw-r--r--src/core/SkMatrix.cpp6
-rw-r--r--src/core/SkMatrixImageFilter.cpp12
-rw-r--r--src/effects/SkBlurMaskFilter.cpp18
-rw-r--r--src/effects/SkDropShadowImageFilter.cpp11
-rw-r--r--src/effects/SkHighContrastFilter.cpp10
6 files changed, 45 insertions, 16 deletions
diff --git a/src/core/SkBlurImageFilter.cpp b/src/core/SkBlurImageFilter.cpp
index e81a11eba0..556508ee27 100644
--- a/src/core/SkBlurImageFilter.cpp
+++ b/src/core/SkBlurImageFilter.cpp
@@ -122,6 +122,10 @@ sk_sp<SkFlattenable> SkBlurImageFilterImpl::CreateProc(SkReadBuffer& buffer) {
static_assert(SkBlurImageFilter::kLast_TileMode == 2, "CreateProc");
+ if (!buffer.validate(safe)) {
+ return nullptr;
+ }
+
return SkBlurImageFilter::Make(
sigmaX, sigmaY, common.getInput(0), &common.cropRect(), tileMode);
}
diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp
index 8e0639c7e8..9a70fbbc7d 100644
--- a/src/core/SkMatrix.cpp
+++ b/src/core/SkMatrix.cpp
@@ -1655,10 +1655,8 @@ size_t SkMatrix::readFromMemory(const void* buffer, size_t length) {
if (length < sizeInMemory) {
return 0;
}
- if (buffer) {
- memcpy(fMat, buffer, sizeInMemory);
- this->setTypeMask(kUnknown_Mask);
- }
+ memcpy(fMat, buffer, sizeInMemory);
+ this->setTypeMask(kUnknown_Mask);
return sizeInMemory;
}
diff --git a/src/core/SkMatrixImageFilter.cpp b/src/core/SkMatrixImageFilter.cpp
index 3531d183cc..1a5ca7ccf9 100644
--- a/src/core/SkMatrixImageFilter.cpp
+++ b/src/core/SkMatrixImageFilter.cpp
@@ -11,6 +11,7 @@
#include "SkColorSpaceXformer.h"
#include "SkImageFilterPriv.h"
#include "SkReadBuffer.h"
+#include "SkSafeRange.h"
#include "SkSpecialImage.h"
#include "SkSpecialSurface.h"
#include "SkWriteBuffer.h"
@@ -33,10 +34,19 @@ sk_sp<SkImageFilter> SkMatrixImageFilter::Make(const SkMatrix& transform,
}
sk_sp<SkFlattenable> SkMatrixImageFilter::CreateProc(SkReadBuffer& buffer) {
+ SkSafeRange safe;
+
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
SkMatrix matrix;
buffer.readMatrix(&matrix);
- SkFilterQuality quality = static_cast<SkFilterQuality>(buffer.readInt());
+
+ SkFilterQuality quality = safe.checkLE<SkFilterQuality>(buffer.readInt(),
+ kLast_SkFilterQuality);
+
+ if (!buffer.validate(safe)) {
+ return nullptr;
+ }
+
return Make(matrix, quality, common.getInput(0));
}
diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp
index d730d62d14..866e724190 100644
--- a/src/effects/SkBlurMaskFilter.cpp
+++ b/src/effects/SkBlurMaskFilter.cpp
@@ -10,6 +10,7 @@
#include "SkGpuBlurUtils.h"
#include "SkMaskFilterBase.h"
#include "SkReadBuffer.h"
+#include "SkSafeRange.h"
#include "SkWriteBuffer.h"
#include "SkMaskFilter.h"
#include "SkRRect.h"
@@ -733,22 +734,21 @@ void SkBlurMaskFilterImpl::computeFastBounds(const SkRect& src,
}
sk_sp<SkFlattenable> SkBlurMaskFilterImpl::CreateProc(SkReadBuffer& buffer) {
- const SkScalar sigma = buffer.readScalar();
- const unsigned style = buffer.readUInt();
- unsigned flags = buffer.readUInt();
+ SkSafeRange safe;
- buffer.validate(style <= kLastEnum_SkBlurStyle);
- buffer.validate(!(flags & ~SkBlurMaskFilter::kAll_BlurFlag));
+ const SkScalar sigma = buffer.readScalar();
- flags &= SkBlurMaskFilter::kAll_BlurFlag;
+ SkBlurStyle style = safe.checkLE(buffer.readUInt(), kLastEnum_SkBlurStyle);
+ unsigned flags = safe.checkLE(buffer.readUInt(), SkBlurMaskFilter::kAll_BlurFlag);
SkRect occluder;
buffer.readRect(&occluder);
- if (style <= kLastEnum_SkBlurStyle) {
- return SkBlurMaskFilter::Make((SkBlurStyle)style, sigma, occluder, flags);
+ if (!buffer.validate(safe)) {
+ return nullptr;
}
- return nullptr;
+
+ return SkBlurMaskFilter::Make((SkBlurStyle)style, sigma, occluder, flags);
}
void SkBlurMaskFilterImpl::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkDropShadowImageFilter.cpp b/src/effects/SkDropShadowImageFilter.cpp
index ab1b2a5c7e..bd0fb75353 100644
--- a/src/effects/SkDropShadowImageFilter.cpp
+++ b/src/effects/SkDropShadowImageFilter.cpp
@@ -12,6 +12,7 @@
#include "SkColorSpaceXformer.h"
#include "SkImageFilterPriv.h"
#include "SkReadBuffer.h"
+#include "SkSafeRange.h"
#include "SkSpecialImage.h"
#include "SkSpecialSurface.h"
#include "SkWriteBuffer.h"
@@ -41,13 +42,21 @@ SkDropShadowImageFilter::SkDropShadowImageFilter(SkScalar dx, SkScalar dy,
}
sk_sp<SkFlattenable> SkDropShadowImageFilter::CreateProc(SkReadBuffer& buffer) {
+ SkSafeRange safe;
+
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
SkScalar dx = buffer.readScalar();
SkScalar dy = buffer.readScalar();
SkScalar sigmaX = buffer.readScalar();
SkScalar sigmaY = buffer.readScalar();
SkColor color = buffer.readColor();
- ShadowMode shadowMode = static_cast<ShadowMode>(buffer.readInt());
+
+ ShadowMode shadowMode = safe.checkLE<ShadowMode>(buffer.readInt(), kLast_ShadowMode);
+
+ if (!buffer.validate(safe)) {
+ return nullptr;
+ }
+
return Make(dx, dy, sigmaX, sigmaY, color, shadowMode, common.getInput(0), &common.cropRect());
}
diff --git a/src/effects/SkHighContrastFilter.cpp b/src/effects/SkHighContrastFilter.cpp
index 9df04c110b..69cbcd7a9c 100644
--- a/src/effects/SkHighContrastFilter.cpp
+++ b/src/effects/SkHighContrastFilter.cpp
@@ -9,6 +9,7 @@
#include "SkPM4f.h"
#include "SkArenaAlloc.h"
#include "SkRasterPipeline.h"
+#include "SkSafeRange.h"
#include "SkReadBuffer.h"
#include "SkString.h"
#include "SkWriteBuffer.h"
@@ -141,10 +142,17 @@ void SkHighContrast_Filter::flatten(SkWriteBuffer& buffer) const {
}
sk_sp<SkFlattenable> SkHighContrast_Filter::CreateProc(SkReadBuffer& buffer) {
+ SkSafeRange safe;
+
SkHighContrastConfig config;
config.fGrayscale = buffer.readBool();
- config.fInvertStyle = static_cast<InvertStyle>(buffer.readInt());
+ config.fInvertStyle = safe.checkLE<InvertStyle>(buffer.readInt(), InvertStyle::kLast);
config.fContrast = buffer.readScalar();
+
+ if (!buffer.validate(safe)) {
+ return nullptr;
+ }
+
return SkHighContrastFilter::Make(config);
}