Changed maxInputCount for exact inputCount

Processing still had issue when the number of inputs was 0, so I changed my previous fix from a maximum input count to an exact input count. -1 is used when the input count isn't fixed (but still has to be a non-negative number).

BUG=
R=senorblanco@chromium.org, reed@google.com, sugoi@google.com, bsalomon@google.com

Author: sugoi@chromium.org

Review URL: https://codereview.chromium.org/100803004

git-svn-id: http://skia.googlecode.com/svn/trunk@12492 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
commit-bot@chromium.org 2013-12-04 20:07:47 +00:00
parent a0b266d817
commit c84728d72a
4 changed files with 15 additions and 11 deletions

View File

@ -156,7 +156,14 @@ protected:
virtual ~SkImageFilter(); virtual ~SkImageFilter();
explicit SkImageFilter(int maxInputCount, SkFlattenableReadBuffer& rb); /**
* Constructs a new SkImageFilter read from an SkFlattenableReadBuffer object.
*
* @param inputCount The exact number of inputs expected for this SkImageFilter object.
* -1 can be used if the filter accepts any number of inputs.
* @param rb SkFlattenableReadBuffer object from which the SkImageFilter is read.
*/
explicit SkImageFilter(int inputCount, SkFlattenableReadBuffer& rb);
virtual void flatten(SkFlattenableWriteBuffer& wb) const SK_OVERRIDE; virtual void flatten(SkFlattenableWriteBuffer& wb) const SK_OVERRIDE;

View File

@ -1532,11 +1532,11 @@ bool SkScriptEngine::ConvertTo(SkScriptEngine* engine, SkDisplayTypes toType, Sk
SkString* strPtr = new SkString(); SkString* strPtr = new SkString();
SkASSERT(engine); SkASSERT(engine);
engine->track(strPtr); engine->track(strPtr);
if (type == SkType_Int) if (type == SkType_Int) {
strPtr->appendS32(operand.fS32); strPtr->appendS32(operand.fS32);
else if (type == SkType_Displayable) } else if (type == SkType_Displayable) {
SkASSERT(0); // must call through instance version instead of static version SkASSERT(0); // must call through instance version instead of static version
else { } else {
if (type != SkType_Float) { if (type != SkType_Float) {
success = false; success = false;
break; break;

View File

@ -53,9 +53,9 @@ SkImageFilter::~SkImageFilter() {
delete[] fInputs; delete[] fInputs;
} }
SkImageFilter::SkImageFilter(int maxInputCount, SkFlattenableReadBuffer& buffer) { SkImageFilter::SkImageFilter(int inputCount, SkFlattenableReadBuffer& buffer) {
fInputCount = buffer.readInt(); fInputCount = buffer.readInt();
if (buffer.validate((fInputCount >= 0) && (fInputCount <= maxInputCount))) { if (buffer.validate((fInputCount >= 0) && ((inputCount < 0) || (fInputCount == inputCount)))) {
fInputs = new SkImageFilter*[fInputCount]; fInputs = new SkImageFilter*[fInputCount];
for (int i = 0; i < fInputCount; i++) { for (int i = 0; i < fInputCount; i++) {
if (buffer.readBool()) { if (buffer.readBool()) {

View File

@ -11,9 +11,6 @@
#include "SkFlattenableBuffers.h" #include "SkFlattenableBuffers.h"
#include "SkValidationUtils.h" #include "SkValidationUtils.h"
// Use 65535 as an arbitrary large number of inputs that this image filter should never overflow
static const int kMaxInputs = 65535;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
void SkMergeImageFilter::initAllocModes() { void SkMergeImageFilter::initAllocModes() {
@ -56,7 +53,7 @@ SkMergeImageFilter::SkMergeImageFilter(SkImageFilter* first, SkImageFilter* seco
SkMergeImageFilter::SkMergeImageFilter(SkImageFilter* filters[], int count, SkMergeImageFilter::SkMergeImageFilter(SkImageFilter* filters[], int count,
const SkXfermode::Mode modes[], const SkXfermode::Mode modes[],
const CropRect* cropRect) : INHERITED(count, filters, cropRect) { const CropRect* cropRect) : INHERITED(count, filters, cropRect) {
SkASSERT(count <= kMaxInputs); SkASSERT(count >= 0);
this->initModes(modes); this->initModes(modes);
} }
@ -161,7 +158,7 @@ void SkMergeImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const {
} }
SkMergeImageFilter::SkMergeImageFilter(SkFlattenableReadBuffer& buffer) SkMergeImageFilter::SkMergeImageFilter(SkFlattenableReadBuffer& buffer)
: INHERITED(kMaxInputs, buffer) { : INHERITED(-1, buffer) {
bool hasModes = buffer.readBool(); bool hasModes = buffer.readBool();
if (hasModes) { if (hasModes) {
this->initAllocModes(); this->initAllocModes();