diff --git a/engine/src/flutter/impeller/aiks/aiks_unittests.cc b/engine/src/flutter/impeller/aiks/aiks_unittests.cc index 13b287e5ee7..703cbe9c819 100644 --- a/engine/src/flutter/impeller/aiks/aiks_unittests.cc +++ b/engine/src/flutter/impeller/aiks/aiks_unittests.cc @@ -3948,5 +3948,31 @@ TEST_P(AiksTest, BlurredRectangleWithShader) { ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); } +TEST_P(AiksTest, ArcWithZeroSweepAndBlur) { + Canvas canvas; + canvas.Scale(GetContentScale()); + + Paint paint; + paint.color = Color::Red(); + std::vector colors = {Color{1.0, 0.0, 0.0, 1.0}, + Color{0.0, 0.0, 0.0, 1.0}}; + std::vector stops = {0.0, 1.0}; + paint.color_source = ColorSource::MakeSweepGradient( + {100, 100}, Degrees(45), Degrees(135), std::move(colors), + std::move(stops), Entity::TileMode::kMirror, {}); + paint.mask_blur_descriptor = Paint::MaskBlurDescriptor{ + .style = FilterContents::BlurStyle::kNormal, + .sigma = Sigma(20), + }; + + PathBuilder builder; + builder.AddArc(Rect::MakeXYWH(10, 10, 100, 100), Degrees(0), Degrees(0), + false); + canvas.DrawPath(builder.TakePath(), paint); + + // Check that this empty picture can be created without crashing. + canvas.EndRecordingAsPicture(); +} + } // namespace testing } // namespace impeller diff --git a/engine/src/flutter/impeller/aiks/paint.cc b/engine/src/flutter/impeller/aiks/paint.cc index 332973e3c2a..708c8782f36 100644 --- a/engine/src/flutter/impeller/aiks/paint.cc +++ b/engine/src/flutter/impeller/aiks/paint.cc @@ -166,7 +166,7 @@ std::shared_ptr Paint::MaskBlurDescriptor::CreateMaskBlur( auto expanded_local_bounds = blurred_mask->GetCoverage({}); if (!expanded_local_bounds.has_value()) { - return nullptr; + expanded_local_bounds = Rect(); } color_source_contents->SetGeometry( Geometry::MakeRect(*expanded_local_bounds));