Skip to content

Commit a730258

Browse files
jadenrogersPureWeenjsuarezruiz
authored
Fix NullReferenceException in PaintExtensions.IsSolid on Android (#28116)
* Fix NullReferenceException in PaintExtensions.IsSolid on Android Added null check to prevent crash when SolidPaint is null, addressing issue seen in Border rendering on Android. * - simplify * Updated IsSolid methods using linear and radial gradients * A few new tests * Changes based on feedback. Use the IsNullOrEmpty method * More changes * Fix test * More changes --------- Co-authored-by: Shane Neuville <shneuvil@microsoft.com> Co-authored-by: Javier Suárez <javiersuarezruiz@hotmail.com>
1 parent 2c74335 commit a730258

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

src/Core/src/Graphics/PaintExtensions.Android.cs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Linq;
33
using Android.Content;
44
using Android.Content.Res;
@@ -84,17 +84,12 @@ internal static bool IsSolid(this AColor color)
8484

8585
internal static bool IsSolid(this SolidPaint paint)
8686
{
87-
return paint.Color.Alpha == 1;
87+
return !paint.IsNullOrEmpty() && paint.Color.Alpha == 1;
8888
}
8989

90-
internal static bool IsSolid(this LinearGradientPaint paint)
90+
internal static bool IsSolid(this GradientPaint paint)
9191
{
92-
return paint.GradientStops.All(s => s.Color.Alpha == 1);
93-
}
94-
95-
internal static bool IsSolid(this RadialGradientPaint paint)
96-
{
97-
return paint.GradientStops.All(s => s.Color.Alpha == 1);
92+
return !paint.IsNullOrEmpty() && paint.GradientStops.All(s => s.Color?.Alpha == 1);
9893
}
9994

10095
internal static bool IsValid(this GradientPaint? gradientPaint) =>

src/Core/tests/DeviceTests/Graphics/GraphicsTests.Android.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,19 @@ public void SolidPaintTest(string hexColor)
154154
Assert.True(solidPaint.IsSolid());
155155
}
156156

157+
[Fact]
158+
public void NullSolidPaintTest()
159+
{
160+
Color nullColor = null;
161+
var solidPaintNullColor = new SolidPaint(nullColor);
162+
163+
Assert.False(solidPaintNullColor.IsSolid());
164+
165+
SolidPaint nullSolidPaint = null;
166+
167+
Assert.False(nullSolidPaint.IsSolid());
168+
}
169+
157170
[Theory]
158171
[InlineData("#FF0000", "#00FF00")]
159172
[InlineData("#00FF00", "#0000FF")]
@@ -167,6 +180,14 @@ public void LinearGradientPaintTest(string startHexColor, string endHexColor)
167180
Assert.True(linearGradientPaint.IsSolid());
168181
}
169182

183+
[Fact]
184+
public void NullLinearGradientPaintTest()
185+
{
186+
LinearGradientPaintStub nullLinearGradientPaint = null;
187+
188+
Assert.False(nullLinearGradientPaint.IsSolid());
189+
}
190+
170191
[Theory]
171192
[InlineData("#FF0000", "#00FF00")]
172193
[InlineData("#00FF00", "#0000FF")]
@@ -179,4 +200,12 @@ public void RadialGradientPaintTest(string startHexColor, string endHexColor)
179200

180201
Assert.True(radialGradientPaint.IsSolid());
181202
}
203+
204+
[Fact]
205+
public void NullRadialGradientPaintTest()
206+
{
207+
RadialGradientPaintStub nullRadialGradientPaint = null;
208+
209+
Assert.False(nullRadialGradientPaint.IsSolid());
210+
}
182211
}

0 commit comments

Comments
 (0)