From d23033278583f30e6ab076ba05600b9877f4ba00 Mon Sep 17 00:00:00 2001 From: Callum Moffat Date: Fri, 2 Sep 2022 14:31:05 -0400 Subject: [PATCH] Fix SIGSEGV on no-op blur --- display_list/display_list_image_filter.h | 6 +++++- display_list/display_list_image_filter_unittests.cc | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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);