diff --git a/lib/ui/painting/image_filter.cc b/lib/ui/painting/image_filter.cc index 90105f4054ed1..665d3b0372b77 100644 --- a/lib/ui/painting/image_filter.cc +++ b/lib/ui/painting/image_filter.cc @@ -83,8 +83,14 @@ void ImageFilter::initColorFilter(ColorFilter* colorFilter) { void ImageFilter::initComposeFilter(ImageFilter* outer, ImageFilter* inner) { FML_DCHECK(outer && inner); - filter_ = std::make_shared(outer->dl_filter(), - inner->dl_filter()); + if (!outer->dl_filter()) { + filter_ = inner->filter(); + } else if (!inner->dl_filter()) { + filter_ = outer->filter(); + } else { + filter_ = std::make_shared(outer->dl_filter(), + inner->dl_filter()); + } } } // namespace flutter diff --git a/testing/dart/canvas_test.dart b/testing/dart/canvas_test.dart index 69bcbc77c2c68..e7b276fddd9d0 100644 --- a/testing/dart/canvas_test.dart +++ b/testing/dart/canvas_test.dart @@ -113,6 +113,11 @@ void testNoCrashes() { // Regression test for https://github.com/flutter/flutter/issues/115143 testCanvas((Canvas canvas) => canvas.drawPaint(Paint()..imageFilter = const ColorFilter.mode(Color(0x00000000), BlendMode.xor))); + + // Regression test for https://github.com/flutter/flutter/issues/120278 + testCanvas((Canvas canvas) => canvas.drawPaint(Paint()..imageFilter = ImageFilter.compose( + outer: ImageFilter.matrix(Matrix4.identity().storage), + inner: ImageFilter.blur()))); }); }