| Index: src/core/SkFlattenableSerialization.cpp
|
| diff --git a/src/core/SkFlattenableSerialization.cpp b/src/core/SkFlattenableSerialization.cpp
|
| index b74c82f051648f77dce5da97b26e21ba53b12e4b..c6bce673f4bedc29c8913d09407d0b57d4a2baf4 100644
|
| --- a/src/core/SkFlattenableSerialization.cpp
|
| +++ b/src/core/SkFlattenableSerialization.cpp
|
| @@ -9,6 +9,7 @@
|
|
|
| #include "SkData.h"
|
| #include "SkFlattenable.h"
|
| +#include "SkImageFilter.h"
|
| #include "SkOrderedReadBuffer.h"
|
| #include "SkOrderedWriteBuffer.h"
|
|
|
| @@ -26,3 +27,27 @@ SkFlattenable* SkDeserializeFlattenable(const void* data, size_t size) {
|
| SkOrderedReadBuffer buffer(data, size);
|
| return buffer.readFlattenable();
|
| }
|
| +
|
| +bool SkValidateImageFilterRec(SkFlattenable* flattenable) {
|
| + if (!flattenable
|
| + // This object should always have been sent cross-process,
|
| + // so it should always have a factory
|
| + || !flattenable->getFactory()
|
| + // Only SkImageFilter objects are allowed
|
| + || !flattenable->isA(SkFlattenable::IMAGE_FILTER))
|
| + return false;
|
| +
|
| + // Check that all the inputs are also SkImageFilter objects
|
| + SkImageFilter* filter = static_cast<SkImageFilter*>(flattenable);
|
| + int nbInputs = filter->countInputs();
|
| + for (int i = 0; i < nbInputs; ++i)
|
| + if (!SkValidateImageFilterRec(filter->getInput(i)))
|
| + return false;
|
| +
|
| + return true;
|
| +}
|
| +
|
| +SkImageFilter* SkValidateImageFilter(SkFlattenable* flattenable) {
|
| + return SkValidateImageFilterRec(flattenable) ?
|
| + static_cast<SkImageFilter*>(flattenable) : 0;
|
| +}
|
|
|