Skip to content

Commit

Permalink
Code Health | Enforcing Ordinal for StringComparison (#2068)
Browse files Browse the repository at this point in the history
  • Loading branch information
JRahnama committed Jun 27, 2023
1 parent 8fad4a4 commit 3b45ee7
Show file tree
Hide file tree
Showing 30 changed files with 113 additions and 89 deletions.
@@ -0,0 +1,9 @@
# editorconfig.org

# top-most EditorConfig file
root = false

[*.cs]

# CA1310: Specify StringComparison for correctness
dotnet_diagnostic.CA1310.severity = error
3 changes: 3 additions & 0 deletions src/Microsoft.Data.SqlClient/netcore/src/.editorconfig
Expand Up @@ -13,3 +13,6 @@ csharp_prefer_simple_using_statement = false

# SYSLIB0039: Type or member is obsolete
dotnet_diagnostic.SYSLIB0039.severity = suggestion

# CA1310: Specify StringComparison for correctness
dotnet_diagnostic.CA1310.severity = error
Expand Up @@ -675,7 +675,7 @@ private void ReportSNIError(SNIProviders provider)
private bool InferNamedPipesInformation()
{
// If we have a datasource beginning with a pipe or we have already determined that the protocol is Named Pipe
if (_dataSourceAfterTrimmingProtocol.StartsWith(PipeBeginning) || _connectionProtocol == Protocol.NP)
if (_dataSourceAfterTrimmingProtocol.StartsWith(PipeBeginning, StringComparison.Ordinal) || _connectionProtocol == Protocol.NP)
{
// If the data source is "np:servername"
if (!_dataSourceAfterTrimmingProtocol.Contains(PipeBeginning))
Expand Down Expand Up @@ -714,7 +714,7 @@ private bool InferNamedPipesInformation()
return false;
}

if (tokensByBackSlash[4].StartsWith(NamedPipeInstanceNameHeader))
if (tokensByBackSlash[4].StartsWith(NamedPipeInstanceNameHeader, StringComparison.Ordinal))
{
InstanceName = tokensByBackSlash[4].Substring(NamedPipeInstanceNameHeader.Length);
}
Expand Down
Expand Up @@ -369,7 +369,7 @@ private RSACng CreateRSACngProvider(string keyPath, bool isSystemOp)
/// <param name="keyIdentifier">Key identifier inside the CNG provider</param>
private void GetCngProviderAndKeyId(string keyPath, bool isSystemOp, out string cngProvider, out string keyIdentifier)
{
int indexOfSlash = keyPath.IndexOf(@"/");
int indexOfSlash = keyPath.IndexOf(@"/", StringComparison.Ordinal);
if (indexOfSlash == -1)
{
throw SQL.InvalidCngPath(keyPath, isSystemOp);
Expand Down
Expand Up @@ -395,7 +395,7 @@ private RSACryptoServiceProvider CreateRSACryptoProvider(string keyPath, bool is
/// <param name="keyIdentifier">output containing the key name</param>
private void GetCspProviderAndKeyName(string keyPath, bool isSystemOp, out string cspProviderName, out string keyIdentifier)
{
int indexOfSlash = keyPath.IndexOf(@"/");
int indexOfSlash = keyPath.IndexOf(@"/", StringComparison.Ordinal);
if (indexOfSlash == -1)
{
throw SQL.InvalidCspPath(keyPath, isSystemOp);
Expand Down
Expand Up @@ -434,7 +434,7 @@ internal void ProcessPendingAck(TdsParserStateObject stateObj)

FQDNforDNSCache = serverInfo.ResolvedServerName;

int commaPos = FQDNforDNSCache.IndexOf(",");
int commaPos = FQDNforDNSCache.IndexOf(",", StringComparison.Ordinal);
if (commaPos != -1)
{
FQDNforDNSCache = FQDNforDNSCache.Substring(0, commaPos);
Expand Down
Expand Up @@ -453,7 +453,7 @@ static private string GetFullPathInternal(string path)
}

// make sure path is not DOS device path
if (!path.StartsWith(@"\\") && !System.IO.PathInternal.IsDevice(path.AsSpan()))
if (!path.StartsWith(@"\\", StringComparison.Ordinal) && !System.IO.PathInternal.IsDevice(path.AsSpan()))
{
throw ADP.Argument(StringsHelper.GetString(Strings.SqlFileStream_InvalidPath), "path");
}
Expand Down
3 changes: 3 additions & 0 deletions src/Microsoft.Data.SqlClient/netfx/src/.editorconfig
Expand Up @@ -7,3 +7,6 @@ root = false

# IDE0090: Use 'new(...)'
csharp_style_implicit_object_creation_when_type_is_apparent = false

# CA1310: Specify StringComparison for correctness
dotnet_diagnostic.CA1310.severity = error
Expand Up @@ -373,7 +373,7 @@ private static bool IsValidAuthenticationMethodEnum()
{
for (int i = 0; i < l; i++)
{
if (s_supportedAuthenticationModes[i].CompareTo(names[i]) != 0)
if (string.Compare(s_supportedAuthenticationModes[i], names[i], StringComparison.Ordinal) != 0)
{
listValid = false;
}
Expand Down
Expand Up @@ -122,7 +122,7 @@ public override async Task<SqlAuthenticationToken> AcquireTokenAsync(SqlAuthenti
// Use Connection timeout value to cancel token acquire request after certain period of time.
cts.CancelAfter(parameters.ConnectionTimeout * 1000); // Convert to milliseconds

string scope = parameters.Resource.EndsWith(s_defaultScopeSuffix) ? parameters.Resource : parameters.Resource + s_defaultScopeSuffix;
string scope = parameters.Resource.EndsWith(s_defaultScopeSuffix, StringComparison.Ordinal) ? parameters.Resource : parameters.Resource + s_defaultScopeSuffix;
string[] scopes = new string[] { scope };
TokenRequestContext tokenRequestContext = new(scopes);

Expand Down
Expand Up @@ -983,7 +983,7 @@ private static string GetComputerNameDnsFullyQualified()
{
var domainName = "." + IPGlobalProperties.GetIPGlobalProperties().DomainName;
var hostName = Dns.GetHostName();
if (domainName != "." && !hostName.EndsWith(domainName))
if (domainName != "." && !hostName.EndsWith(domainName, StringComparison.Ordinal))
hostName += domainName;
return hostName;
}
Expand Down
Expand Up @@ -406,7 +406,7 @@ internal static void VerifyColumnMasterKeySignature(string keyStoreName, string
private static bool ShouldUseInstanceLevelProviderFlow(string keyStoreName, SqlConnection connection, SqlCommand command)
{
return InstanceLevelProvidersAreRegistered(connection, command) &&
!keyStoreName.StartsWith(ADP.ColumnEncryptionSystemProviderNamePrefix);
!keyStoreName.StartsWith(ADP.ColumnEncryptionSystemProviderNamePrefix, StringComparison.Ordinal);
}

private static bool InstanceLevelProvidersAreRegistered(SqlConnection connection, SqlCommand command) =>
Expand Down
Expand Up @@ -47,7 +47,7 @@ public override bool TryGetMember(GetMemberBinder binder, out object result)
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
var resourceName = binder.Name;
if (resourceName.StartsWith("Get_"))
if (resourceName.StartsWith("Get_", StringComparison.Ordinal))
resourceName = resourceName.Remove(0, 4);

return TryGetResourceValue(resourceName, args, out result);
Expand Down
Expand Up @@ -38,8 +38,8 @@ public void CatalogLocation_Value_Invalid()
Assert.Equal(typeof(ArgumentException), ex.GetType());
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("'CatalogLocation'") != -1);
Assert.True(ex.Message.IndexOf("'Start'") != -1);
Assert.True(ex.Message.IndexOf("'CatalogLocation'", StringComparison.Ordinal) != -1);
Assert.True(ex.Message.IndexOf("'Start'", StringComparison.Ordinal) != -1);
Assert.Null(ex.ParamName);
}
Assert.Equal(CatalogLocation.Start, cb.CatalogLocation);
Expand All @@ -55,8 +55,8 @@ public void CatalogLocation_Value_Invalid()
Assert.Equal(typeof(ArgumentException), ex.GetType());
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("'CatalogLocation'") != -1);
Assert.True(ex.Message.IndexOf("'Start'") != -1);
Assert.True(ex.Message.IndexOf("'CatalogLocation'", StringComparison.Ordinal) != -1);
Assert.True(ex.Message.IndexOf("'Start'", StringComparison.Ordinal) != -1);
Assert.Null(ex.ParamName);
}
Assert.Equal(CatalogLocation.Start, cb.CatalogLocation);
Expand Down Expand Up @@ -92,8 +92,8 @@ public void CatalogSeparator_Value_Invalid(string separator)
Assert.Equal(typeof(ArgumentException), ex.GetType());
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("'CatalogSeparator'") != -1);
Assert.True(ex.Message.IndexOf("'.'") != -1);
Assert.True(ex.Message.IndexOf("'CatalogSeparator'", StringComparison.Ordinal) != -1);
Assert.True(ex.Message.IndexOf("'.'", StringComparison.Ordinal) != -1);
Assert.Null(ex.ParamName);
}
}
Expand Down Expand Up @@ -122,8 +122,8 @@ public void ConflictOption_Value_Invalid()
Assert.Equal(typeof(ArgumentOutOfRangeException), ex.GetType());
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("ConflictOption") != -1);
Assert.True(ex.Message.IndexOf("666") != -1);
Assert.True(ex.Message.IndexOf("ConflictOption", StringComparison.Ordinal) != -1);
Assert.True(ex.Message.IndexOf("666", StringComparison.Ordinal) != -1);
Assert.Equal("ConflictOption", ex.ParamName);
}
Assert.Equal(ConflictOption.CompareRowVersion, cb.ConflictOption);
Expand Down Expand Up @@ -190,8 +190,8 @@ public void QuoteIdentifier_PrefixSuffix_NoMatch()
Assert.Equal(typeof(ArgumentException), ex.GetType());
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("QuotePrefix") != -1);
Assert.True(ex.Message.IndexOf("QuoteSuffix") != -1);
Assert.True(ex.Message.IndexOf("QuotePrefix", StringComparison.Ordinal) != -1);
Assert.True(ex.Message.IndexOf("QuoteSuffix", StringComparison.Ordinal) != -1);
Assert.Null(ex.ParamName);
}

Expand All @@ -208,8 +208,8 @@ public void QuoteIdentifier_PrefixSuffix_NoMatch()
Assert.Equal(typeof(ArgumentException), ex.GetType());
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("QuotePrefix") != -1);
Assert.True(ex.Message.IndexOf("QuoteSuffix") != -1);
Assert.True(ex.Message.IndexOf("QuotePrefix", StringComparison.Ordinal) != -1);
Assert.True(ex.Message.IndexOf("QuoteSuffix", StringComparison.Ordinal) != -1);
Assert.Null(ex.ParamName);
}
}
Expand Down Expand Up @@ -340,8 +340,8 @@ public void SchemaSeparator_Value_Invalid(string separator)
Assert.Equal(typeof(ArgumentException), ex.GetType());
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("'SchemaSeparator'") != -1);
Assert.True(ex.Message.IndexOf("'.'") != -1);
Assert.True(ex.Message.IndexOf("'SchemaSeparator'", StringComparison.Ordinal) != -1);
Assert.True(ex.Message.IndexOf("'.'", StringComparison.Ordinal) != -1);
Assert.Null(ex.ParamName);
}
}
Expand Down
Expand Up @@ -304,7 +304,7 @@ public void CommandType_Value_Invalid()
// The CommandType enumeration value, 666, is invalid
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("666") != -1);
Assert.True(ex.Message.IndexOf("666", StringComparison.Ordinal) != -1);
Assert.Equal("CommandType", ex.ParamName);
}

Expand Down Expand Up @@ -334,7 +334,7 @@ public void ExecuteNonQuery_Connection_Closed()
// closed.
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("ExecuteNonQuery") != -1);
Assert.True(ex.Message.IndexOf("ExecuteNonQuery", StringComparison.Ordinal) != -1);
}

[Fact]
Expand Down Expand Up @@ -364,7 +364,7 @@ public void ExecuteReader_Connection_Closed()
// closed.
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("ExecuteReader") != -1);
Assert.True(ex.Message.IndexOf("ExecuteReader", StringComparison.Ordinal) != -1);
}

[Fact]
Expand Down Expand Up @@ -395,7 +395,7 @@ public void ExecuteScalar_Connection_Closed()
// closed.
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("ExecuteScalar") != -1);
Assert.True(ex.Message.IndexOf("ExecuteScalar", StringComparison.Ordinal) != -1);
}

[Fact] // bug #412584
Expand Down Expand Up @@ -449,7 +449,7 @@ public void Prepare_Connection_Closed()
// is Closed
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("Prepare") != -1);
Assert.True(ex.Message.IndexOf("Prepare", StringComparison.Ordinal) != -1);

// Text, parameters cleared
cmd = new SqlCommand("select count(*) from whatever", cn);
Expand Down
Expand Up @@ -34,7 +34,7 @@ public void Constructor1()
Assert.Null(cn.Site);
Assert.Equal(ConnectionState.Closed, cn.State);
Assert.False(cn.StatisticsEnabled);
Assert.True(string.Compare(Environment.MachineName, cn.WorkstationId, true) == 0);
Assert.True(string.Compare(Environment.MachineName, cn.WorkstationId, StringComparison.OrdinalIgnoreCase) == 0);
}

[Fact]
Expand All @@ -54,7 +54,7 @@ public void Constructor2()
Assert.Null(cn.Site);
Assert.Equal(ConnectionState.Closed, cn.State);
Assert.False(cn.StatisticsEnabled);
Assert.True(string.Compare(Environment.MachineName, cn.WorkstationId, true) == 0);
Assert.True(string.Compare(Environment.MachineName, cn.WorkstationId, StringComparison.OrdinalIgnoreCase) == 0);

cn = new SqlConnection((string)null);
Assert.Equal(string.Empty, cn.ConnectionString);
Expand All @@ -68,7 +68,7 @@ public void Constructor2()
Assert.Null(cn.Site);
Assert.Equal(ConnectionState.Closed, cn.State);
Assert.False(cn.StatisticsEnabled);
Assert.True(string.Compare(Environment.MachineName, cn.WorkstationId, true) == 0);
Assert.True(string.Compare(Environment.MachineName, cn.WorkstationId, StringComparison.OrdinalIgnoreCase) == 0);
}

[Fact]
Expand Down Expand Up @@ -201,7 +201,7 @@ public void ChangePassword_NewPassword_Empty()
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.NotNull(ex.ParamName);
Assert.True(ex.ParamName.IndexOf("'newPassword'") != -1);
Assert.True(ex.ParamName.IndexOf("'newPassword'", StringComparison.Ordinal) != -1);
}

[Fact]
Expand All @@ -212,8 +212,8 @@ public void ChangePassword_NewPassword_ExceedMaxLength()
// its limit of '128'
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("'newPassword'") != -1);
Assert.True(ex.Message.IndexOf("128") != -1);
Assert.True(ex.Message.IndexOf("'newPassword'", StringComparison.Ordinal) != -1);
Assert.True(ex.Message.IndexOf("128", StringComparison.Ordinal) != -1);
Assert.Null(ex.ParamName);
}

Expand All @@ -224,7 +224,7 @@ public void ChangePassword_NewPassword_Null()
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.NotNull(ex.ParamName);
Assert.True(ex.ParamName.IndexOf("'newPassword'") != -1);
Assert.True(ex.ParamName.IndexOf("'newPassword'", StringComparison.Ordinal) != -1);
}

[Fact]
Expand Down Expand Up @@ -305,7 +305,7 @@ public void Dispose()
Assert.Equal(string.Empty, cn.Database);
Assert.Equal(string.Empty, cn.DataSource);
Assert.Equal(8000, cn.PacketSize);
Assert.True(string.Compare(Environment.MachineName, cn.WorkstationId, true) == 0);
Assert.True(string.Compare(Environment.MachineName, cn.WorkstationId, StringComparison.OrdinalIgnoreCase) == 0);
Assert.Equal(ConnectionState.Closed, cn.State);
cn.Dispose();

Expand Down
Expand Up @@ -1155,7 +1155,7 @@ public void SqlDbTypeTest_Value_Invalid()
Assert.Equal(typeof(ArgumentOutOfRangeException), ex.GetType());
Assert.Null(ex.InnerException);
Assert.NotNull(ex.Message);
Assert.True(ex.Message.IndexOf("666") != -1);
Assert.True(ex.Message.IndexOf("666", StringComparison.Ordinal) != -1);
Assert.Equal("SqlDbType", ex.ParamName);
}
}
Expand Down
Expand Up @@ -46,7 +46,7 @@ public void TestKeysFromCertificatesCreatedWithMultipleCryptoProviders(string co
using (Microsoft.Win32.RegistryKey providerKey = defaultCryptoProvidersRegistryKey.OpenSubKey(subKeyName))
{
// Get Provider Name and its type
providerName = providerKey.Name.Substring(providerKey.Name.LastIndexOf(@"\") + 1);
providerName = providerKey.Name.Substring(providerKey.Name.LastIndexOf(@"\", StringComparison.Ordinal) + 1);
providerType = providerKey.GetValue(@"Type").ToString();

// Create a certificate from that provider
Expand Down

0 comments on commit 3b45ee7

Please sign in to comment.