summaryrefslogtreecommitdiff
path: root/core/SkImageFilter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/SkImageFilter.cpp')
-rw-r--r--core/SkImageFilter.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/core/SkImageFilter.cpp b/core/SkImageFilter.cpp
index cca22bba..cda635b4 100644
--- a/core/SkImageFilter.cpp
+++ b/core/SkImageFilter.cpp
@@ -17,8 +17,6 @@
#include "SkImageFilterUtils.h"
#endif
-SK_DEFINE_INST_COUNT(SkImageFilter)
-
SkImageFilter::SkImageFilter(int inputCount, SkImageFilter** inputs, const CropRect* cropRect)
: fInputCount(inputCount),
fInputs(new SkImageFilter*[inputCount]),
@@ -53,9 +51,9 @@ SkImageFilter::~SkImageFilter() {
delete[] fInputs;
}
-SkImageFilter::SkImageFilter(int maxInputCount, SkFlattenableReadBuffer& buffer) {
+SkImageFilter::SkImageFilter(int inputCount, SkFlattenableReadBuffer& buffer) {
fInputCount = buffer.readInt();
- if (buffer.validate((fInputCount >= 0) && (fInputCount <= maxInputCount))) {
+ if (buffer.validate((fInputCount >= 0) && ((inputCount < 0) || (fInputCount == inputCount)))) {
fInputs = new SkImageFilter*[fInputCount];
for (int i = 0; i < fInputCount; i++) {
if (buffer.readBool()) {
@@ -63,10 +61,14 @@ SkImageFilter::SkImageFilter(int maxInputCount, SkFlattenableReadBuffer& buffer)
} else {
fInputs[i] = NULL;
}
+ if (!buffer.isValid()) {
+ fInputCount = i; // Do not use fInputs past that point in the destructor
+ break;
+ }
}
SkRect rect;
buffer.readRect(&rect);
- if (buffer.validate(SkIsValidRect(rect))) {
+ if (buffer.isValid() && buffer.validate(SkIsValidRect(rect))) {
uint32_t flags = buffer.readUInt();
fCropRect = CropRect(rect, flags);
}