Fix crash on ImageFilter.blur with very small sigma (flutter/engine#35890)

This commit is contained in:
Callum Moffat 2022-09-08 20:14:57 -04:00 committed by GitHub
parent 40eb019805
commit ce10462a1d
2 changed files with 15 additions and 1 deletions

View File

@ -712,7 +712,11 @@ class DlLocalMatrixImageFilter final : public DlImageFilter {
if (!image_filter_) {
return nullptr;
}
return image_filter_->skia_object()->makeWithLocalMatrix(matrix_);
sk_sp<SkImageFilter> skia_object = image_filter_->skia_object();
if (!skia_object) {
return nullptr;
}
return skia_object->makeWithLocalMatrix(matrix_);
}
protected:

View File

@ -846,6 +846,16 @@ TEST(DisplayListImageFilter, LocalImageFilterBounds) {
}
}
TEST(DisplayListImageFilter, LocalImageSkiaNull) {
auto blur_filter =
std::make_shared<DlBlurImageFilter>(0, 0, DlTileMode::kClamp);
DlLocalMatrixImageFilter dl_local_matrix_filter(SkMatrix::RotateDeg(45),
blur_filter);
// With sigmas set to zero on the blur filter, Skia will return a null filter.
// The local matrix filter should return nullptr instead of crashing.
ASSERT_EQ(dl_local_matrix_filter.skia_object(), nullptr);
}
TEST(DisplayListImageFilter, UnknownEquals) {
sk_sp<SkImageFilter> sk_filter =
SkImageFilters::Blur(5.0, 6.0, SkTileMode::kRepeat, nullptr);