diff options
Diffstat (limited to 'core/SkImageFilter.cpp')
-rw-r--r-- | core/SkImageFilter.cpp | 12 |
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); } |