From 2346719742ea2dd795c52211e9b149fa6b3e2b1f Mon Sep 17 00:00:00 2001 From: Stephen Toub Date: Mon, 15 Apr 2024 11:58:16 -0400 Subject: [PATCH] Fix ArgumentNullException in SecurityIdentifier.CompareTo(null) Changed to `return 1` to conform to the interface's described behavior. --- .../src/System/Security/Principal/SID.cs | 5 ++++- .../tests/WellKnownSidTypeTests.cs | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Security.Principal.Windows/src/System/Security/Principal/SID.cs b/src/libraries/System.Security.Principal.Windows/src/System/Security/Principal/SID.cs index 8cfdb97aa0777..e21a610b3a9a8 100644 --- a/src/libraries/System.Security.Principal.Windows/src/System/Security/Principal/SID.cs +++ b/src/libraries/System.Security.Principal.Windows/src/System/Security/Principal/SID.cs @@ -861,7 +861,10 @@ public override IdentityReference Translate(Type targetType) public int CompareTo(SecurityIdentifier? sid) { - ArgumentNullException.ThrowIfNull(sid); + if (sid is null) + { + return 1; + } if (this.IdentifierAuthority < sid.IdentifierAuthority) { diff --git a/src/libraries/System.Security.Principal.Windows/tests/WellKnownSidTypeTests.cs b/src/libraries/System.Security.Principal.Windows/tests/WellKnownSidTypeTests.cs index 07d9404e65e18..962b0c16c6663 100644 --- a/src/libraries/System.Security.Principal.Windows/tests/WellKnownSidTypeTests.cs +++ b/src/libraries/System.Security.Principal.Windows/tests/WellKnownSidTypeTests.cs @@ -152,4 +152,15 @@ public void MaxDefinedHasLegacyValue() Assert.Equal(WellKnownSidType.WinBuiltinTerminalServerLicenseServersSid, WellKnownSidType.MaxDefined); #pragma warning restore 0618 } + + [ConditionalTheory(nameof(AccountIsDomainJoined))] + [InlineData(WellKnownSidType.WorldSid)] + public void CompareTo_Null(WellKnownSidType sidType) + { + using (var identity = WindowsIdentity.GetCurrent()) + { + var si = new SecurityIdentifier(sidType, identity.Owner.AccountDomainSid); + Assert.Equal(1, si.CompareTo(null)); + } + } }