From bcfe2f05d3499256f614399e0a17a670282974d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Chalet?= Date: Wed, 7 May 2025 18:12:00 +0200 Subject: [PATCH] Update OpenIddictParameter to return empty immutable arrays instead of uninitialized instances --- .../Primitives/OpenIddictParameter.cs | 8 ++++---- .../Primitives/OpenIddictParameterTests.cs | 11 +++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/OpenIddict.Abstractions/Primitives/OpenIddictParameter.cs b/src/OpenIddict.Abstractions/Primitives/OpenIddictParameter.cs index 96b14d0b..3eaabbe0 100644 --- a/src/OpenIddict.Abstractions/Primitives/OpenIddictParameter.cs +++ b/src/OpenIddict.Abstractions/Primitives/OpenIddictParameter.cs @@ -815,7 +815,7 @@ public readonly struct OpenIddictParameter : IEquatable /// The parameter to convert. /// The converted value. public static explicit operator bool(OpenIddictParameter? parameter) - => ((bool?) parameter).GetValueOrDefault(); + => ((bool?) parameter) ?? false; /// /// Converts an instance to a nullable boolean. @@ -1015,7 +1015,7 @@ public readonly struct OpenIddictParameter : IEquatable /// The parameter to convert. /// The converted value. public static explicit operator long(OpenIddictParameter? parameter) - => ((long?) parameter).GetValueOrDefault(); + => ((long?) parameter) ?? 0; /// /// Converts an instance to a nullable long integer. @@ -1150,7 +1150,7 @@ public readonly struct OpenIddictParameter : IEquatable /// The parameter to convert. /// The converted value. public static explicit operator StringValues(OpenIddictParameter? parameter) - => ((StringValues?) parameter).GetValueOrDefault(); + => ((StringValues?) parameter) ?? StringValues.Empty; /// /// Converts an instance to a instance. @@ -1269,7 +1269,7 @@ public readonly struct OpenIddictParameter : IEquatable /// The parameter to convert. /// The converted value. public static explicit operator ImmutableArray(OpenIddictParameter? parameter) - => ((ImmutableArray?) parameter).GetValueOrDefault(); + => ((ImmutableArray?) parameter) ?? []; /// /// Converts an instance to an immutable array of strings. diff --git a/test/OpenIddict.Abstractions.Tests/Primitives/OpenIddictParameterTests.cs b/test/OpenIddict.Abstractions.Tests/Primitives/OpenIddictParameterTests.cs index 4b348a09..1ff32961 100644 --- a/test/OpenIddict.Abstractions.Tests/Primitives/OpenIddictParameterTests.cs +++ b/test/OpenIddict.Abstractions.Tests/Primitives/OpenIddictParameterTests.cs @@ -2071,15 +2071,26 @@ public class OpenIddictParameterTests public void StringArrayConverter_ReturnsDefaultValueForUnsupportedJsonValues() { // Arrange, act and assert + Assert.Empty((ImmutableArray) new OpenIddictParameter(new JsonElement())); Assert.Null((ImmutableArray?) new OpenIddictParameter(new JsonElement())); + + Assert.Empty((ImmutableArray) new OpenIddictParameter( + JsonSerializer.Deserialize(@"[""value"",[]]"))); Assert.Null((ImmutableArray?) new OpenIddictParameter( JsonSerializer.Deserialize(@"[""value"",[]]"))); + Assert.Empty((ImmutableArray) new OpenIddictParameter( + JsonSerializer.Deserialize(@"[""value"",{}]"))); Assert.Null((ImmutableArray?) new OpenIddictParameter( JsonSerializer.Deserialize(@"[""value"",{}]"))); + Assert.Empty((ImmutableArray) new OpenIddictParameter((JsonNode?) null)); Assert.Null((ImmutableArray?) new OpenIddictParameter((JsonNode?) null)); + + Assert.Empty((ImmutableArray) new OpenIddictParameter(new JsonArray("value", new JsonArray()))); Assert.Null((ImmutableArray?) new OpenIddictParameter(new JsonArray("value", new JsonArray()))); + + Assert.Empty((ImmutableArray) new OpenIddictParameter(new JsonArray("value", new JsonObject()))); Assert.Null((ImmutableArray?) new OpenIddictParameter(new JsonArray("value", new JsonObject()))); }