diff --git a/display_list/display_list_image_filter.h b/display_list/display_list_image_filter.h index c495c4cf098b2..4f48414b88a98 100644 --- a/display_list/display_list_image_filter.h +++ b/display_list/display_list_image_filter.h @@ -712,7 +712,11 @@ class DlLocalMatrixImageFilter final : public DlImageFilter { if (!image_filter_) { return nullptr; } - return image_filter_->skia_object()->makeWithLocalMatrix(matrix_); + sk_sp skia_object = image_filter_->skia_object(); + if (!skia_object) { + return nullptr; + } + return skia_object->makeWithLocalMatrix(matrix_); } protected: diff --git a/display_list/display_list_image_filter_unittests.cc b/display_list/display_list_image_filter_unittests.cc index f3f2507cf3b82..b3e646fdacbe4 100644 --- a/display_list/display_list_image_filter_unittests.cc +++ b/display_list/display_list_image_filter_unittests.cc @@ -846,6 +846,16 @@ TEST(DisplayListImageFilter, LocalImageFilterBounds) { } } +TEST(DisplayListImageFilter, LocalImageSkiaNull) { + auto blur_filter = + std::make_shared(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 sk_filter = SkImageFilters::Blur(5.0, 6.0, SkTileMode::kRepeat, nullptr);