Skip to content

Commit

Permalink
Merge pull request #1633 from SimonCropp/use-faster-char-based-Starts…
Browse files Browse the repository at this point in the history
…With,-EndsWith,-and-Contains

use faster char based StartsWith, EndsWith, and Contains
  • Loading branch information
damianh authored Nov 27, 2024
2 parents 44b7dc5 + 3c8a9e6 commit d1e1717
Show file tree
Hide file tree
Showing 13 changed files with 32 additions and 32 deletions.
16 changes: 8 additions & 8 deletions src/EntityFramework.Storage/Extensions/StringsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public static bool IsPresent(this string value)
[DebuggerStepThrough]
public static string EnsureLeadingSlash(this string url)
{
if (url != null && !url.StartsWith("/"))
if (url != null && !url.StartsWith('/'))
{
return "/" + url;
}
Expand All @@ -90,7 +90,7 @@ public static string EnsureLeadingSlash(this string url)
[DebuggerStepThrough]
public static string EnsureTrailingSlash(this string url)
{
if (url != null && !url.EndsWith("/"))
if (url != null && !url.EndsWith('/'))
{
return url + "/";
}
Expand All @@ -101,7 +101,7 @@ public static string EnsureTrailingSlash(this string url)
[DebuggerStepThrough]
public static string RemoveLeadingSlash(this string url)
{
if (url != null && url.StartsWith("/"))
if (url != null && url.StartsWith('/'))
{
url = url.Substring(1);
}
Expand All @@ -112,7 +112,7 @@ public static string RemoveLeadingSlash(this string url)
[DebuggerStepThrough]
public static string RemoveTrailingSlash(this string url)
{
if (url != null && url.EndsWith("/"))
if (url != null && url.EndsWith('/'))
{
url = url.Substring(0, url.Length - 1);
}
Expand All @@ -125,7 +125,7 @@ public static string CleanUrlPath(this string url)
{
if (String.IsNullOrWhiteSpace(url)) url = "/";

if (url != "/" && url.EndsWith("/"))
if (url != "/" && url.EndsWith('/'))
{
url = url.Substring(0, url.Length - 1);
}
Expand Down Expand Up @@ -199,11 +199,11 @@ static bool HasControlCharacter(ReadOnlySpan<char> readOnlySpan)
[DebuggerStepThrough]
public static string AddQueryString(this string url, string query)
{
if (!url.Contains("?"))
if (!url.Contains('?'))
{
url += "?";
}
else if (!url.EndsWith("&"))
else if (!url.EndsWith('&'))
{
url += "&";
}
Expand All @@ -220,7 +220,7 @@ public static string AddQueryString(this string url, string name, string value)
[DebuggerStepThrough]
public static string AddHashFragment(this string url, string query)
{
if (!url.Contains("#"))
if (!url.Contains('#'))
{
url += "#";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,6 @@ public SigningAlgorithmOptions(string name)
/// </summary>
public bool UseX509Certificate { get; set; }

internal bool IsRsaKey => Name.StartsWith("R") || Name.StartsWith("P");
internal bool IsEcKey => Name.StartsWith("E");
internal bool IsRsaKey => Name.StartsWith('R') || Name.StartsWith('P');
internal bool IsEcKey => Name.StartsWith('E');
}
2 changes: 1 addition & 1 deletion src/IdentityServer/Endpoints/Results/AuthorizeResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ private string BuildRedirectUri(AuthorizeResponse response)
uri = uri.AddHashFragment(query);
}

if (response.IsError && !uri.Contains("#"))
if (response.IsError && !uri.Contains('#'))
{
// https://tools.ietf.org/html/draft-bradley-oauth-open-redirector-00
uri += "#_=_";
Expand Down
2 changes: 1 addition & 1 deletion src/IdentityServer/Extensions/ResourceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ internal static bool AreValidResourceIndicatorFormat(this IEnumerable<string> li
return false;
}

if (item.Contains("#"))
if (item.Contains('#'))
{
logger.LogDebug("Resource indicator {resource} must not contain a fragment component.", item);
return false;
Expand Down
16 changes: 8 additions & 8 deletions src/IdentityServer/Extensions/StringsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public static bool IsPresent([NotNullWhen(true)] this string value)
[DebuggerStepThrough]
public static string EnsureLeadingSlash(this string url)
{
if (url != null && !url.StartsWith("/"))
if (url != null && !url.StartsWith('/'))
{
return "/" + url;
}
Expand All @@ -93,7 +93,7 @@ public static string EnsureLeadingSlash(this string url)
[DebuggerStepThrough]
public static string EnsureTrailingSlash(this string url)
{
if (url != null && !url.EndsWith("/"))
if (url != null && !url.EndsWith('/'))
{
return url + "/";
}
Expand All @@ -104,7 +104,7 @@ public static string EnsureTrailingSlash(this string url)
[DebuggerStepThrough]
public static string RemoveLeadingSlash(this string url)
{
if (url != null && url.StartsWith("/"))
if (url != null && url.StartsWith('/'))
{
url = url.Substring(1);
}
Expand All @@ -115,7 +115,7 @@ public static string RemoveLeadingSlash(this string url)
[DebuggerStepThrough]
public static string RemoveTrailingSlash(this string url)
{
if (url != null && url.EndsWith("/"))
if (url != null && url.EndsWith('/'))
{
url = url.Substring(0, url.Length - 1);
}
Expand All @@ -128,7 +128,7 @@ public static string CleanUrlPath(this string url)
{
if (String.IsNullOrWhiteSpace(url)) url = "/";

if (url != "/" && url.EndsWith("/"))
if (url != "/" && url.EndsWith('/'))
{
url = url.Substring(0, url.Length - 1);
}
Expand Down Expand Up @@ -218,11 +218,11 @@ public static bool IsUri(this string input)
[DebuggerStepThrough]
public static string AddQueryString(this string url, string query)
{
if (!url.Contains("?"))
if (!url.Contains('?'))
{
url += "?";
}
else if (!url.EndsWith("&"))
else if (!url.EndsWith('&'))
{
url += "&";
}
Expand All @@ -239,7 +239,7 @@ public static string AddQueryString(this string url, string name, string value)
[DebuggerStepThrough]
public static string AddHashFragment(this string url, string query)
{
if (!url.Contains("#"))
if (!url.Contains('#'))
{
url += "#";
}
Expand Down
2 changes: 1 addition & 1 deletion src/IdentityServer/Hosting/MutualTlsEndpointMiddleware.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public async Task Invoke(HttpContext context, IAuthenticationSchemeProvider sche
if (_options.MutualTls.DomainName.IsPresent())
{
// separate domain
if (_options.MutualTls.DomainName.Contains("."))
if (_options.MutualTls.DomainName.Contains('.'))
{
if (context.Request.Host.Host.Equals(_options.MutualTls.DomainName,
StringComparison.OrdinalIgnoreCase))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ string ConstructMtlsEndpoint(string endpoint)
}

// domain based
if (Options.MutualTls.DomainName.Contains("."))
if (Options.MutualTls.DomainName.Contains('.'))
{
return $"https://{Options.MutualTls.DomainName}/{endpoint}";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public Task<string> GetCurrentAsync()

if (_options.MutualTls.Enabled && _options.MutualTls.DomainName.IsPresent())
{
if (!_options.MutualTls.DomainName.Contains("."))
if (!_options.MutualTls.DomainName.Contains('.'))
{
var request = _httpContextAccessor.HttpContext.Request;
if (request.Host.Value.StartsWith(_options.MutualTls.DomainName, StringComparison.OrdinalIgnoreCase))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ public KeyContainer Unprotect(SerializedKey key)
return KeySerializer.Deserialize<X509KeyContainer>(data);
}

if (key.Algorithm.StartsWith("R") || key.Algorithm.StartsWith("P"))
if (key.Algorithm.StartsWith('R') || key.Algorithm.StartsWith('P'))
{
return KeySerializer.Deserialize<RsaKeyContainer>(data);
}

if (key.Algorithm.StartsWith("E"))
if (key.Algorithm.StartsWith('E'))
{
return KeySerializer.Deserialize<EcKeyContainer>(data);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ protected virtual Task ValidateAllowedCorsOriginsAsync(ClientConfigurationValida
{
var uri = new Uri(origin);

if (uri.AbsolutePath == "/" && !origin.EndsWith("/"))
if (uri.AbsolutePath == "/" && !origin.EndsWith('/'))
{
fail = false;
}
Expand Down
4 changes: 2 additions & 2 deletions src/IdentityServer/Validation/Default/TokenValidator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ public async Task<TokenValidationResult> ValidateAccessTokenAsync(string token,

TokenValidationResult result;

if (token.Contains("."))
if (token.Contains('.'))
{
if (token.Length > _options.InputLengthRestrictions.Jwt)
{
Expand Down Expand Up @@ -347,7 +347,7 @@ private async Task<TokenValidationResult> ValidateJwtAsync(string jwtString,
{
foreach (var scope in scopes)
{
if (scope.Value.Contains(" "))
if (scope.Value.Contains(' '))
{
claims.Remove(scope);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class GenericHost
{
public GenericHost(string baseAddress = "https://server")
{
if (baseAddress.EndsWith("/")) baseAddress = baseAddress.Substring(0, baseAddress.Length - 1);
if (baseAddress.EndsWith('/')) baseAddress = baseAddress.Substring(0, baseAddress.Length - 1);
_baseAddress = baseAddress;
}

Expand Down Expand Up @@ -43,7 +43,7 @@ public T Resolve<T>()

public string Url(string path = "")
{
if (!path.StartsWith("/")) path = "/" + path;
if (!path.StartsWith('/')) path = "/" + path;
return _baseAddress + path;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class GenericHost
{
public GenericHost(string baseAddress = "https://server")
{
if (baseAddress.EndsWith("/")) baseAddress = baseAddress.Substring(0, baseAddress.Length - 1);
if (baseAddress.EndsWith('/')) baseAddress = baseAddress.Substring(0, baseAddress.Length - 1);
_baseAddress = baseAddress;
}

Expand All @@ -50,7 +50,7 @@ public T Resolve<T>()
public string Url(string path = null)
{
path = path ?? String.Empty;
if (!path.StartsWith("/")) path = "/" + path;
if (!path.StartsWith('/')) path = "/" + path;
return _baseAddress + path;
}

Expand Down

0 comments on commit d1e1717

Please sign in to comment.