diff --git a/gen/OpenIddict.Client.WebIntegration.Generators/OpenIddictClientWebIntegrationGenerator.cs b/gen/OpenIddict.Client.WebIntegration.Generators/OpenIddictClientWebIntegrationGenerator.cs index 523ea83a..8a2a228e 100644 --- a/gen/OpenIddict.Client.WebIntegration.Generators/OpenIddictClientWebIntegrationGenerator.cs +++ b/gen/OpenIddict.Client.WebIntegration.Generators/OpenIddictClientWebIntegrationGenerator.cs @@ -456,7 +456,7 @@ public partial class OpenIddictClientWebIntegrationConfiguration /// /// The name of the options instance to configure, if applicable. /// The options instance to initialize. - public void PostConfigure(string name, OpenIddictClientWebIntegrationOptions.{{ provider.name }} options) + public void PostConfigure(string? name, OpenIddictClientWebIntegrationOptions.{{ provider.name }} options) { {{~ for setting in provider.settings ~}} {{~ if setting.default_value && setting.type == 'String' ~}} diff --git a/src/OpenIddict.Abstractions/Primitives/OpenIddictExtensions.cs b/src/OpenIddict.Abstractions/Primitives/OpenIddictExtensions.cs index 73ac83d2..8ebb94f1 100644 --- a/src/OpenIddict.Abstractions/Primitives/OpenIddictExtensions.cs +++ b/src/OpenIddict.Abstractions/Primitives/OpenIddictExtensions.cs @@ -176,7 +176,7 @@ public static class OpenIddictExtensions } var segment = Trim(new StringSegment(request.ResponseType), Separators.Space); - if (segment.Length is 0) + if (!segment.HasValue || segment.Length is 0) { return false; } @@ -203,7 +203,7 @@ public static class OpenIddictExtensions } var segment = Trim(new StringSegment(request.ResponseType), Separators.Space); - if (segment.Length is 0) + if (!segment.HasValue || segment.Length is 0) { return false; } @@ -235,7 +235,7 @@ public static class OpenIddictExtensions foreach (var element in new StringTokenizer(request.ResponseType, Separators.Space)) { var segment = Trim(element, Separators.Space); - if (segment.Length is 0) + if (!segment.HasValue || segment.Length is 0) { continue; } @@ -289,7 +289,7 @@ public static class OpenIddictExtensions foreach (var element in new StringTokenizer(request.ResponseType, Separators.Space)) { var segment = Trim(element, Separators.Space); - if (segment.Length is 0) + if (!segment.HasValue || segment.Length is 0) { continue; } @@ -2922,7 +2922,7 @@ public static class OpenIddictExtensions foreach (var element in new StringTokenizer(source, separators)) { var segment = Trim(element, separators); - if (segment.Length is 0) + if (!segment.HasValue || segment.Length is 0) { continue; } @@ -2951,7 +2951,7 @@ public static class OpenIddictExtensions foreach (var element in new StringTokenizer(source, separators)) { var segment = Trim(element, separators); - if (segment.Length is 0) + if (!segment.HasValue || segment.Length is 0) { continue; } @@ -2969,6 +2969,11 @@ public static class OpenIddictExtensions { Debug.Assert(separators is { Length: > 0 }, SR.GetResourceString(SR.ID4001)); + if (!segment.HasValue || segment.Length is 0) + { + return segment; + } + var index = segment.Offset; while (index < segment.Offset + segment.Length) @@ -2988,6 +2993,11 @@ public static class OpenIddictExtensions { Debug.Assert(separators is { Length: > 0 }, SR.GetResourceString(SR.ID4001)); + if (!segment.HasValue || segment.Length is 0) + { + return segment; + } + var index = segment.Offset + segment.Length - 1; while (index >= segment.Offset) diff --git a/src/OpenIddict.Client.AspNetCore/OpenIddictClientAspNetCoreConfiguration.cs b/src/OpenIddict.Client.AspNetCore/OpenIddictClientAspNetCoreConfiguration.cs index 349ae54f..277e61d6 100644 --- a/src/OpenIddict.Client.AspNetCore/OpenIddictClientAspNetCoreConfiguration.cs +++ b/src/OpenIddict.Client.AspNetCore/OpenIddictClientAspNetCoreConfiguration.cs @@ -53,7 +53,7 @@ public class OpenIddictClientAspNetCoreConfiguration : IConfigureOptions /// The authentication scheme associated with the handler instance. /// The options instance to initialize. - public void PostConfigure(string name, AuthenticationOptions options) + public void PostConfigure(string? name, AuthenticationOptions options) { if (options is null) { diff --git a/src/OpenIddict.Client.DataProtection/OpenIddictClientDataProtectionConfiguration.cs b/src/OpenIddict.Client.DataProtection/OpenIddictClientDataProtectionConfiguration.cs index 40c60ead..75b4b2ac 100644 --- a/src/OpenIddict.Client.DataProtection/OpenIddictClientDataProtectionConfiguration.cs +++ b/src/OpenIddict.Client.DataProtection/OpenIddictClientDataProtectionConfiguration.cs @@ -41,7 +41,7 @@ public class OpenIddictClientDataProtectionConfiguration : IConfigureOptions /// The name of the options instance to configure, if applicable. /// The options instance to initialize. - public void PostConfigure(string name, OpenIddictClientDataProtectionOptions options) + public void PostConfigure(string? name, OpenIddictClientDataProtectionOptions options) { if (options is null) { diff --git a/src/OpenIddict.Client.Owin/OpenIddictClientOwinConfiguration.cs b/src/OpenIddict.Client.Owin/OpenIddictClientOwinConfiguration.cs index 77fff3b6..33a157e9 100644 --- a/src/OpenIddict.Client.Owin/OpenIddictClientOwinConfiguration.cs +++ b/src/OpenIddict.Client.Owin/OpenIddictClientOwinConfiguration.cs @@ -25,7 +25,7 @@ public class OpenIddictClientOwinConfiguration : IConfigureOptions Configure(Options.DefaultName, options); - public void Configure(string name, HttpClientFactoryOptions options) + public void Configure(string? name, HttpClientFactoryOptions options) { if (options is null) { diff --git a/src/OpenIddict.Client/OpenIddictClientConfiguration.cs b/src/OpenIddict.Client/OpenIddictClientConfiguration.cs index cafd67a6..ef841b56 100644 --- a/src/OpenIddict.Client/OpenIddictClientConfiguration.cs +++ b/src/OpenIddict.Client/OpenIddictClientConfiguration.cs @@ -27,7 +27,7 @@ public class OpenIddictClientConfiguration : IPostConfigureOptions /// The authentication scheme associated with the handler instance. /// The options instance to initialize. - public void PostConfigure(string name, OpenIddictClientOptions options) + public void PostConfigure(string? name, OpenIddictClientOptions options) { if (options is null) { diff --git a/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreConfiguration.cs b/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreConfiguration.cs index 9545ab36..76b043cc 100644 --- a/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreConfiguration.cs +++ b/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreConfiguration.cs @@ -54,7 +54,7 @@ public class OpenIddictServerAspNetCoreConfiguration : IConfigureOptions /// The name of the options instance to configure, if applicable. /// The options instance to initialize. - public void PostConfigure(string name, AuthenticationOptions options) + public void PostConfigure(string? name, AuthenticationOptions options) { if (options is null) { @@ -89,7 +89,7 @@ public class OpenIddictServerAspNetCoreConfiguration : IConfigureOptions /// The name of the options instance to configure, if applicable. /// The options instance to initialize. - public void PostConfigure(string name, OpenIddictServerAspNetCoreOptions options) + public void PostConfigure(string? name, OpenIddictServerAspNetCoreOptions options) { if (options is null) { diff --git a/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreHandlers.cs b/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreHandlers.cs index 6a62dd43..e30763eb 100644 --- a/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreHandlers.cs +++ b/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreHandlers.cs @@ -737,7 +737,7 @@ public static partial class OpenIddictServerAspNetCoreHandlers var request = context.Transaction.GetHttpRequest() ?? throw new InvalidOperationException(SR.GetResourceString(SR.ID0114)); - string header = request.Headers[HeaderNames.Authorization]; + string? header = request.Headers[HeaderNames.Authorization]; if (string.IsNullOrEmpty(header) || !header.StartsWith("Basic ", StringComparison.OrdinalIgnoreCase)) { return default; @@ -836,7 +836,7 @@ public static partial class OpenIddictServerAspNetCoreHandlers Debug.Assert(context.Transaction.Request is not null, SR.GetResourceString(SR.ID4008)); - string header = request.Headers[HeaderNames.Authorization]; + string? header = request.Headers[HeaderNames.Authorization]; if (string.IsNullOrEmpty(header) || !header.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase)) { return default; diff --git a/src/OpenIddict.Server.DataProtection/OpenIddictServerDataProtectionConfiguration.cs b/src/OpenIddict.Server.DataProtection/OpenIddictServerDataProtectionConfiguration.cs index 27f05bd0..05c8996d 100644 --- a/src/OpenIddict.Server.DataProtection/OpenIddictServerDataProtectionConfiguration.cs +++ b/src/OpenIddict.Server.DataProtection/OpenIddictServerDataProtectionConfiguration.cs @@ -41,7 +41,7 @@ public class OpenIddictServerDataProtectionConfiguration : IConfigureOptions /// The name of the options instance to configure, if applicable. /// The options instance to initialize. - public void PostConfigure(string name, OpenIddictServerDataProtectionOptions options) + public void PostConfigure(string? name, OpenIddictServerDataProtectionOptions options) { if (options is null) { diff --git a/src/OpenIddict.Server.Owin/OpenIddictServerOwinConfiguration.cs b/src/OpenIddict.Server.Owin/OpenIddictServerOwinConfiguration.cs index cf15a8c2..f6d28791 100644 --- a/src/OpenIddict.Server.Owin/OpenIddictServerOwinConfiguration.cs +++ b/src/OpenIddict.Server.Owin/OpenIddictServerOwinConfiguration.cs @@ -25,7 +25,7 @@ public class OpenIddictServerOwinConfiguration : IConfigureOptions /// The name of the options instance to configure, if applicable. /// The options instance to initialize. - public void PostConfigure(string name, OpenIddictServerOptions options) + public void PostConfigure(string? name, OpenIddictServerOptions options) { if (options is null) { diff --git a/src/OpenIddict.Validation.AspNetCore/OpenIddictValidationAspNetCoreConfiguration.cs b/src/OpenIddict.Validation.AspNetCore/OpenIddictValidationAspNetCoreConfiguration.cs index 404515e5..cae5db67 100644 --- a/src/OpenIddict.Validation.AspNetCore/OpenIddictValidationAspNetCoreConfiguration.cs +++ b/src/OpenIddict.Validation.AspNetCore/OpenIddictValidationAspNetCoreConfiguration.cs @@ -53,7 +53,7 @@ public class OpenIddictValidationAspNetCoreConfiguration : IConfigureOptions /// The name of the options instance to configure, if applicable. /// The options instance to initialize. - public void PostConfigure(string name, AuthenticationOptions options) + public void PostConfigure(string? name, AuthenticationOptions options) { if (options is null) { diff --git a/src/OpenIddict.Validation.AspNetCore/OpenIddictValidationAspNetCoreHandlers.cs b/src/OpenIddict.Validation.AspNetCore/OpenIddictValidationAspNetCoreHandlers.cs index bf688229..43eec9e5 100644 --- a/src/OpenIddict.Validation.AspNetCore/OpenIddictValidationAspNetCoreHandlers.cs +++ b/src/OpenIddict.Validation.AspNetCore/OpenIddictValidationAspNetCoreHandlers.cs @@ -160,7 +160,7 @@ public static partial class OpenIddictValidationAspNetCoreHandlers // Resolve the access token from the standard Authorization header. // See https://tools.ietf.org/html/rfc6750#section-2.1 for more information. - string header = request.Headers[HeaderNames.Authorization]; + string? header = request.Headers[HeaderNames.Authorization]; if (!string.IsNullOrEmpty(header) && header.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase)) { context.AccessToken = header.Substring("Bearer ".Length); diff --git a/src/OpenIddict.Validation.DataProtection/OpenIddictValidationDataProtectionConfiguration.cs b/src/OpenIddict.Validation.DataProtection/OpenIddictValidationDataProtectionConfiguration.cs index c8d4b5e1..ce39d26c 100644 --- a/src/OpenIddict.Validation.DataProtection/OpenIddictValidationDataProtectionConfiguration.cs +++ b/src/OpenIddict.Validation.DataProtection/OpenIddictValidationDataProtectionConfiguration.cs @@ -41,7 +41,7 @@ public class OpenIddictValidationDataProtectionConfiguration : IConfigureOptions /// /// The name of the options instance to configure, if applicable. /// The options instance to initialize. - public void PostConfigure(string name, OpenIddictValidationDataProtectionOptions options) + public void PostConfigure(string? name, OpenIddictValidationDataProtectionOptions options) { if (options is null) { diff --git a/src/OpenIddict.Validation.ServerIntegration/OpenIddictValidationServerIntegrationConfiguration.cs b/src/OpenIddict.Validation.ServerIntegration/OpenIddictValidationServerIntegrationConfiguration.cs index 078d9c83..92336e98 100644 --- a/src/OpenIddict.Validation.ServerIntegration/OpenIddictValidationServerIntegrationConfiguration.cs +++ b/src/OpenIddict.Validation.ServerIntegration/OpenIddictValidationServerIntegrationConfiguration.cs @@ -62,7 +62,7 @@ public class OpenIddictValidationServerIntegrationConfiguration : IConfigureOpti /// /// The name of the options instance to configure, if applicable. /// The options instance to initialize. - public void PostConfigure(string name, OpenIddictValidationOptions options) + public void PostConfigure(string? name, OpenIddictValidationOptions options) { if (options is null) { diff --git a/src/OpenIddict.Validation.SystemNetHttp/OpenIddictValidationSystemNetHttpConfiguration.cs b/src/OpenIddict.Validation.SystemNetHttp/OpenIddictValidationSystemNetHttpConfiguration.cs index 9d764277..b2dade82 100644 --- a/src/OpenIddict.Validation.SystemNetHttp/OpenIddictValidationSystemNetHttpConfiguration.cs +++ b/src/OpenIddict.Validation.SystemNetHttp/OpenIddictValidationSystemNetHttpConfiguration.cs @@ -36,7 +36,7 @@ public class OpenIddictValidationSystemNetHttpConfiguration : IConfigureOptions< public void Configure(HttpClientFactoryOptions options) => Configure(Options.DefaultName, options); - public void Configure(string name, HttpClientFactoryOptions options) + public void Configure(string? name, HttpClientFactoryOptions options) { if (options is null) { diff --git a/src/OpenIddict.Validation/OpenIddictValidationConfiguration.cs b/src/OpenIddict.Validation/OpenIddictValidationConfiguration.cs index 3791246c..00f81e34 100644 --- a/src/OpenIddict.Validation/OpenIddictValidationConfiguration.cs +++ b/src/OpenIddict.Validation/OpenIddictValidationConfiguration.cs @@ -26,7 +26,7 @@ public class OpenIddictValidationConfiguration : IPostConfigureOptions /// The name of the options instance to configure, if applicable. /// The options instance to initialize. - public void PostConfigure(string name, OpenIddictValidationOptions options) + public void PostConfigure(string? name, OpenIddictValidationOptions options) { if (options is null) { diff --git a/test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestClient.cs b/test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestClient.cs index 53f96cde..e32e720d 100644 --- a/test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestClient.cs +++ b/test/OpenIddict.Server.IntegrationTests/OpenIddictServerIntegrationTestClient.cs @@ -380,7 +380,7 @@ public class OpenIddictServerIntegrationTestClient : IAsyncDisposable foreach (var element in new StringTokenizer(payload, Separators.Ampersand)) { var segment = element; - if (segment.Length is 0) + if (!segment.HasValue || segment.Length is 0) { continue; } diff --git a/test/OpenIddict.Validation.IntegrationTests/OpenIddictValidationIntegrationTestClient.cs b/test/OpenIddict.Validation.IntegrationTests/OpenIddictValidationIntegrationTestClient.cs index 01beec3d..afcc5f70 100644 --- a/test/OpenIddict.Validation.IntegrationTests/OpenIddictValidationIntegrationTestClient.cs +++ b/test/OpenIddict.Validation.IntegrationTests/OpenIddictValidationIntegrationTestClient.cs @@ -380,7 +380,7 @@ public class OpenIddictValidationIntegrationTestClient : IAsyncDisposable foreach (var element in new StringTokenizer(payload, Separators.Ampersand)) { var segment = element; - if (segment.Length is 0) + if (!segment.HasValue || segment.Length is 0) { continue; }