Skip to content

Commit 3f40427

Browse files
authored
Fixup null annotations on ClaimsPrincipal
1 parent 891ff91 commit 3f40427

File tree

3 files changed

+27
-19
lines changed

3 files changed

+27
-19
lines changed

src/libraries/System.Security.Claims/ref/System.Security.Claims.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ protected ClaimsPrincipal(System.Runtime.Serialization.SerializationInfo info, S
9090
public ClaimsPrincipal(System.Security.Principal.IIdentity identity) { }
9191
public ClaimsPrincipal(System.Security.Principal.IPrincipal principal) { }
9292
public virtual System.Collections.Generic.IEnumerable<System.Security.Claims.Claim> Claims { get { throw null; } }
93-
public static System.Func<System.Security.Claims.ClaimsPrincipal> ClaimsPrincipalSelector { get { throw null; } set { } }
93+
public static System.Func<System.Security.Claims.ClaimsPrincipal?>? ClaimsPrincipalSelector { get { throw null; } set { } }
9494
public static System.Security.Claims.ClaimsPrincipal? Current { get { throw null; } }
9595
protected virtual byte[]? CustomSerializationData { get { throw null; } }
9696
public virtual System.Collections.Generic.IEnumerable<System.Security.Claims.ClaimsIdentity> Identities { get { throw null; } }

src/libraries/System.Security.Claims/src/System/Security/Claims/ClaimsPrincipal.cs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ private enum SerializationMask
2828
private readonly byte[]? _userSerializationData;
2929

3030
private static Func<IEnumerable<ClaimsIdentity>, ClaimsIdentity?> s_identitySelector = SelectPrimaryIdentity;
31-
private static Func<ClaimsPrincipal> s_principalSelector = ClaimsPrincipalSelector;
31+
private static Func<ClaimsPrincipal?>? s_principalSelector;
3232

3333
private static ClaimsPrincipal? SelectClaimsPrincipal()
3434
{
@@ -74,26 +74,14 @@ protected ClaimsPrincipal(SerializationInfo info, StreamingContext context)
7474

7575
public static Func<IEnumerable<ClaimsIdentity>, ClaimsIdentity?> PrimaryIdentitySelector
7676
{
77-
get
78-
{
79-
return s_identitySelector;
80-
}
81-
set
82-
{
83-
s_identitySelector = value;
84-
}
77+
get => s_identitySelector;
78+
set => s_identitySelector = value;
8579
}
8680

87-
public static Func<ClaimsPrincipal> ClaimsPrincipalSelector
81+
public static Func<ClaimsPrincipal?>? ClaimsPrincipalSelector
8882
{
89-
get
90-
{
91-
return s_principalSelector;
92-
}
93-
set
94-
{
95-
s_principalSelector = value;
96-
}
83+
get => s_principalSelector;
84+
set => s_principalSelector = value;
9785
}
9886

9987
/// <summary>

src/libraries/System.Security.Claims/tests/ClaimsPrincipalTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,26 @@ public void Current_FallsBackToThread_UnauthenticatedPrincipalPolicy()
242242
}).Dispose();
243243
}
244244

245+
[ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))]
246+
public void ClaimsPrincipalSelector_DefaultNull()
247+
{
248+
RemoteExecutor.Invoke(static () =>
249+
{
250+
Assert.Null(ClaimsPrincipal.ClaimsPrincipalSelector);
251+
}).Dispose();
252+
}
253+
254+
[ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))]
255+
public void ClaimsPrincipalSelector_Roundtrip()
256+
{
257+
RemoteExecutor.Invoke(static () =>
258+
{
259+
ClaimsPrincipal selected = new();
260+
ClaimsPrincipal.ClaimsPrincipalSelector = () => selected;
261+
Assert.Same(selected, ClaimsPrincipal.ClaimsPrincipalSelector());
262+
}).Dispose();
263+
}
264+
245265
private class NonClaimsPrincipal : IPrincipal
246266
{
247267
public IIdentity Identity { get; set; }

0 commit comments

Comments
 (0)