diff --git a/Directory.Build.props b/Directory.Build.props
index 4061ca7d42..6b2feba744 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -28,6 +28,7 @@
latest
Default
true
+ true
true
$(MSBuildProjectName.Contains('Test'))
diff --git a/Minio/ApiEndpoints/ObjectOperations.cs b/Minio/ApiEndpoints/ObjectOperations.cs
index c5a6875787..307bb474fa 100644
--- a/Minio/ApiEndpoints/ObjectOperations.cs
+++ b/Minio/ApiEndpoints/ObjectOperations.cs
@@ -1207,7 +1207,7 @@ await ExecuteTaskAsync(NoErrorHandlers, requestMessageBuilder, cancellationToken
{
PartNumber = int.Parse(c.Element(ns + "PartNumber").Value,
CultureInfo.CurrentCulture),
- ETag = c.Element(ns + "ETag").Value.Replace("\"", string.Empty),
+ ETag = c.Element(ns + "ETag").Value.Replace("\"", string.Empty, StringComparison.OrdinalIgnoreCase),
Size = long.Parse(c.Element(ns + "Size").Value,
CultureInfo.CurrentCulture)
};
diff --git a/Minio/Credentials/IAMAWSProvider.cs b/Minio/Credentials/IAMAWSProvider.cs
index a3eba02592..dce57024ce 100644
--- a/Minio/Credentials/IAMAWSProvider.cs
+++ b/Minio/Credentials/IAMAWSProvider.cs
@@ -69,7 +69,7 @@ public AccessCredentials GetCredentials()
url = RequestUtil.MakeTargetURL("sts." + region + ".amazonaws.com", true);
}
- IClientProvider provider = new WebIdentityProvider()
+ var provider = new WebIdentityProvider()
.WithSTSEndpoint(url)
.WithRoleAction("AssumeRoleWithWebIdentity")
.WithDurationInSeconds(null)
@@ -125,7 +125,7 @@ internal AccessCredentials GetAccessCredentials(string tokenFile)
url = new Uri(urlStr);
}
- IClientProvider provider = new WebIdentityProvider()
+ var provider = new WebIdentityProvider()
.WithJWTSupplier(() =>
{
var tokenContents = File.ReadAllText(tokenFile);
@@ -238,7 +238,8 @@ public IAMAWSProvider WithEndpoint(string endpoint)
if (string.IsNullOrEmpty(endpoint))
throw new ArgumentException($"'{nameof(endpoint)}' cannot be null or empty.", nameof(endpoint));
- if (endpoint.Contains("https") || endpoint.Contains("http"))
+ if (endpoint.Contains("https", StringComparison.OrdinalIgnoreCase) ||
+ endpoint.Contains("http", StringComparison.OrdinalIgnoreCase))
CustomEndPoint = new Uri(endpoint);
else
CustomEndPoint = RequestUtil.MakeTargetURL(endpoint, true);
diff --git a/Minio/DataModel/Args/PutObjectArgs.cs b/Minio/DataModel/Args/PutObjectArgs.cs
index ec5090ad33..e029b063b6 100644
--- a/Minio/DataModel/Args/PutObjectArgs.cs
+++ b/Minio/DataModel/Args/PutObjectArgs.cs
@@ -121,7 +121,8 @@ var hash
#else
var hash = SHA256.HashData(RequestBody.Span);
#endif
- var hex = BitConverter.ToString(hash).Replace("-", string.Empty).ToLowerInvariant();
+ var hex = BitConverter.ToString(hash).Replace("-", string.Empty, StringComparison.OrdinalIgnoreCase)
+ .ToLowerInvariant();
requestMessageBuilder.AddOrUpdateHeaderParameter("x-amz-content-sha256", hex);
requestMessageBuilder.SetBody(RequestBody);
}
diff --git a/Minio/DataModel/Item.cs b/Minio/DataModel/Item.cs
index 201e1d94d3..e3e7620f87 100644
--- a/Minio/DataModel/Item.cs
+++ b/Minio/DataModel/Item.cs
@@ -32,7 +32,7 @@ public string ETag
set
{
if (value is not null)
- etag = value.Replace("\"", string.Empty);
+ etag = value.Replace("\"", string.Empty, StringComparison.OrdinalIgnoreCase);
else
etag = null;
}
diff --git a/Minio/DataModel/ObjectStat.cs b/Minio/DataModel/ObjectStat.cs
index 87545eab1c..ecc942ebac 100644
--- a/Minio/DataModel/ObjectStat.cs
+++ b/Minio/DataModel/ObjectStat.cs
@@ -74,7 +74,7 @@ public static ObjectStat FromResponseHeaders(string objectName, IDictionary ExtractHeaders(Span data)
+ private Dictionary ExtractHeaders(Span data)
{
var headerMap = new Dictionary(StringComparer.Ordinal);
var offset = 0;
diff --git a/Minio/Exceptions/CredentialsProviderException.cs b/Minio/Exceptions/CredentialsProviderException.cs
index 7b02e6281a..7d8ca386a3 100644
--- a/Minio/Exceptions/CredentialsProviderException.cs
+++ b/Minio/Exceptions/CredentialsProviderException.cs
@@ -1,4 +1,4 @@
-/*
+/*
* MinIO .NET Library for Amazon S3 Compatible Cloud Storage, (C) 2021 MinIO, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,11 +21,11 @@ namespace Minio.Exceptions;
[Serializable]
public class CredentialsProviderException : MinioException
{
- private readonly string CredentialProviderType;
+ private readonly string credentialProviderType;
public CredentialsProviderException(string credentialProviderType, string message) : base(message)
{
- CredentialProviderType = credentialProviderType;
+ this.credentialProviderType = credentialProviderType;
}
public CredentialsProviderException(ResponseResult serverResponse) : base(serverResponse)
@@ -50,6 +50,6 @@ public CredentialsProviderException(string message, Exception innerException) :
public override string ToString()
{
- return $"{CredentialProviderType}: {base.ToString()}";
+ return $"{credentialProviderType}: {base.ToString()}";
}
}
diff --git a/Minio/Handlers/DefaultErrorHandler.cs b/Minio/Handlers/DefaultErrorHandler.cs
index 8bd0f5b8f2..0ef4dc5913 100644
--- a/Minio/Handlers/DefaultErrorHandler.cs
+++ b/Minio/Handlers/DefaultErrorHandler.cs
@@ -7,6 +7,8 @@ public class DefaultErrorHandler : IApiResponseErrorHandler
{
public void Handle(ResponseResult response)
{
+ if (response is null) throw new ArgumentNullException(nameof(response));
+
if (response.StatusCode is < HttpStatusCode.OK or >= HttpStatusCode.BadRequest)
MinioClient.ParseError(response);
}
diff --git a/Minio/Handlers/DefaultRetryPolicyHandler.cs b/Minio/Handlers/DefaultRetryPolicyHandler.cs
index fa0ad34ea4..1b8e72f7e0 100644
--- a/Minio/Handlers/DefaultRetryPolicyHandler.cs
+++ b/Minio/Handlers/DefaultRetryPolicyHandler.cs
@@ -17,6 +17,8 @@ public DefaultRetryPolicyHandler(Func>, Task Handle(Func> executeRequestCallback)
{
+ if (executeRequestCallback is null) throw new ArgumentNullException(nameof(executeRequestCallback));
+
if (RetryPolicyHandler is not null)
return RetryPolicyHandler.Invoke(executeRequestCallback);
diff --git a/Minio/Helper/BuilderUtil.cs b/Minio/Helper/BuilderUtil.cs
index 85c0c852a3..8be1fa675c 100644
--- a/Minio/Helper/BuilderUtil.cs
+++ b/Minio/Helper/BuilderUtil.cs
@@ -1,4 +1,4 @@
-/*
+/*
* MinIO .NET Library for Amazon S3 Compatible Cloud Storage, (C) 2020 MinIO, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,7 +26,7 @@ public static bool IsAwsDualStackEndpoint(string endpoint)
if (string.IsNullOrEmpty(endpoint))
throw new ArgumentException($"'{nameof(endpoint)}' cannot be null or empty.", nameof(endpoint));
- return endpoint.Contains(".dualstack.");
+ return endpoint.Contains(".dualstack.", StringComparison.OrdinalIgnoreCase);
}
public static bool IsAwsAccelerateEndpoint(string endpoint)
diff --git a/Minio/Helper/Utils.cs b/Minio/Helper/Utils.cs
index 6f640df843..05546cc594 100644
--- a/Minio/Helper/Utils.cs
+++ b/Minio/Helper/Utils.cs
@@ -299,7 +299,7 @@ var hashedBytes
}
[SuppressMessage("Design", "MA0051:Method is too long", Justification = "One time list of type mappings")]
- private static IDictionary AddContentTypeMappings()
+ private static Dictionary AddContentTypeMappings()
{
return new Dictionary(StringComparer.OrdinalIgnoreCase)
{
diff --git a/Minio/MinioClient.cs b/Minio/MinioClient.cs
index f1ee8efda0..1be038218f 100644
--- a/Minio/MinioClient.cs
+++ b/Minio/MinioClient.cs
@@ -76,7 +76,7 @@ public MinioClient()
///
/// Default error handling delegate
///
- private IApiResponseErrorHandler DefaultErrorHandlingDelegate { get; } = new DefaultErrorHandler();
+ public IApiResponseErrorHandler DefaultErrorHandler { get; set; } = new DefaultErrorHandler();
// Save Credentials from user
internal string AccessKey { get; set; }
@@ -326,7 +326,7 @@ internal async Task CreateRequest(
if (method == HttpMethod.Put && objectName is null && resourcePath is null)
// use path style for make bucket to workaround "AuthorizationHeaderMalformed" error from s3.amazonaws.com
usePathStyle = true;
- else if (resourcePath?.Contains("location") == true)
+ else if (resourcePath?.Contains("location", StringComparison.OrdinalIgnoreCase) == true)
// use path style for location query
usePathStyle = true;
else if (bucketName.Contains('.', StringComparison.Ordinal) && Secure)
@@ -608,7 +608,7 @@ private static void ParseErrorFromContent(ResponseResult response)
&& errResponse.Code.Equals("InvalidRequest", StringComparison.OrdinalIgnoreCase))
{
var legalHold = new Dictionary(StringComparer.Ordinal) { { "legal-hold", "" } };
- if (response.Request.RequestUri.Query.Contains("legalHold"))
+ if (response.Request.RequestUri.Query.Contains("legalHold", StringComparison.OrdinalIgnoreCase))
throw new MissingObjectLockConfigurationException(errResponse.BucketName, errResponse.Message);
}
@@ -650,7 +650,7 @@ private void HandleIfErrorResponse(ResponseResult response, IEnumerable
diff --git a/Minio/V4Authenticator.cs b/Minio/V4Authenticator.cs
index 38b4385a64..a96019b5a9 100644
--- a/Minio/V4Authenticator.cs
+++ b/Minio/V4Authenticator.cs
@@ -263,7 +263,8 @@ ReadOnlySpan hash
/// Hexlified string of input bytes
private string BytesToHex(ReadOnlySpan checkSum)
{
- return BitConverter.ToString(checkSum.ToArray()).Replace("-", string.Empty).ToLowerInvariant();
+ return BitConverter.ToString(checkSum.ToArray()).Replace("-", string.Empty, StringComparison.OrdinalIgnoreCase)
+ .ToLowerInvariant();
}
///
@@ -545,7 +546,8 @@ var hash
#else
var hash = SHA256.HashData(body.Span);
#endif
- var hex = BitConverter.ToString(hash).Replace("-", string.Empty).ToLowerInvariant();
+ var hex = BitConverter.ToString(hash).Replace("-", string.Empty, StringComparison.OrdinalIgnoreCase)
+ .ToLowerInvariant();
requestBuilder.AddOrUpdateHeaderParameter("x-amz-content-sha256", hex);
}
else if (!IsSecure && !requestBuilder.Content.IsEmpty)