Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit f98e4f1

Browse files
Ignore invalid filters when constructing an image compose filter (#39528)
Fixes flutter/flutter#120278
1 parent e1e5289 commit f98e4f1

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

lib/ui/painting/image_filter.cc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,14 @@ void ImageFilter::initColorFilter(ColorFilter* colorFilter) {
8383

8484
void ImageFilter::initComposeFilter(ImageFilter* outer, ImageFilter* inner) {
8585
FML_DCHECK(outer && inner);
86-
filter_ = std::make_shared<DlComposeImageFilter>(outer->dl_filter(),
87-
inner->dl_filter());
86+
if (!outer->dl_filter()) {
87+
filter_ = inner->filter();
88+
} else if (!inner->dl_filter()) {
89+
filter_ = outer->filter();
90+
} else {
91+
filter_ = std::make_shared<DlComposeImageFilter>(outer->dl_filter(),
92+
inner->dl_filter());
93+
}
8894
}
8995

9096
} // namespace flutter

testing/dart/canvas_test.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ void testNoCrashes() {
113113

114114
// Regression test for https://github.com/flutter/flutter/issues/115143
115115
testCanvas((Canvas canvas) => canvas.drawPaint(Paint()..imageFilter = const ColorFilter.mode(Color(0x00000000), BlendMode.xor)));
116+
117+
// Regression test for https://github.com/flutter/flutter/issues/120278
118+
testCanvas((Canvas canvas) => canvas.drawPaint(Paint()..imageFilter = ImageFilter.compose(
119+
outer: ImageFilter.matrix(Matrix4.identity().storage),
120+
inner: ImageFilter.blur())));
116121
});
117122
}
118123

0 commit comments

Comments
 (0)