Commit bf9d1852 authored by Khushal's avatar Khushal Committed by Commit Bot

cc/ipc: Null check deserialized filters.

Reject SkImage filters if they fail to deserialize, instead of creating
a FilterOperation with a null filter.

Also fix incorrect enum type on ImageFilterPaintFilter.

R=enne@chromium.org, tsepez@chromium.org

Bug: 
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel
Change-Id: I3cd93fd671e679ac6e8881d75abc47a50d9b5d59
Reviewed-on: https://chromium-review.googlesource.com/791937
Commit-Queue: Khushal <khushalsagar@chromium.org>
Reviewed-by: default avatarenne <enne@chromium.org>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#519587}
parent 9f8247f4
......@@ -293,13 +293,18 @@ bool ParamTraits<sk_sp<SkImageFilter>>::Read(const base::Pickle* m,
int length = 0;
if (!iter->ReadData(&data, &length))
return false;
if (length > 0) {
SkFlattenable* flattenable = skia::ValidatingDeserializeFlattenable(
data, length, SkImageFilter::GetFlattenableType());
*r = sk_sp<SkImageFilter>(static_cast<SkImageFilter*>(flattenable));
} else {
if (length <= 0) {
r->reset();
return true;
}
SkFlattenable* flattenable = skia::ValidatingDeserializeFlattenable(
data, length, SkImageFilter::GetFlattenableType());
if (!flattenable)
return false;
*r = sk_sp<SkImageFilter>(static_cast<SkImageFilter*>(flattenable));
return true;
}
......
......@@ -239,7 +239,7 @@ class CC_PAINT_EXPORT AlphaThresholdPaintFilter final : public PaintFilter {
class CC_PAINT_EXPORT ImageFilterPaintFilter final : public PaintFilter {
public:
static constexpr Type kType = Type::kImage;
static constexpr Type kType = Type::kSkImageFilter;
const SkImageFilter* sk_filter() const { return sk_filter_.get(); }
private:
......
......@@ -47,6 +47,11 @@ struct StructTraits<skia::mojom::ImageFilterDataView, sk_sp<SkImageFilter>> {
SkFlattenable* flattenable = skia::ValidatingDeserializeFlattenable(
buffer.data->bytes(), buffer.data->size(),
SkImageFilter::GetFlattenableType());
if (!flattenable) {
*out = nullptr;
return false;
}
*out = sk_sp<SkImageFilter>(static_cast<SkImageFilter*>(flattenable));
return true;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment