Skip to content

Commit f3c3b2d

Browse files
authored
Fix NPE when using AnonymousCredentials in a credential provider chain with S3 CRT client. (#6552)
1 parent 1f3f817 commit f3c3b2d

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "bugfix",
3+
"category": "Amazon S3",
4+
"contributor": "",
5+
"description": "Fix NullPointerException when using AnonymousCredentials in a CredentialsChain with the S3 CRT Client."
6+
}

services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/crt/CrtCredentialsProviderAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ public CrtCredentialsProviderAdapter(IdentityProvider<? extends AwsCredentialsId
4848

4949
AwsCredentialsIdentity sdkCredentials =
5050
CompletableFutureUtils.joinLikeSync(credentialsProvider.resolveIdentity());
51+
52+
if (sdkCredentials.providerName().map("AnonymousCredentialsProvider"::equals).orElse(false)) {
53+
return Credentials.createAnonymousCredentials();
54+
}
55+
5156
byte[] accessKey = sdkCredentials.accessKeyId().getBytes(StandardCharsets.UTF_8);
5257
byte[] secreteKey = sdkCredentials.secretAccessKey().getBytes(StandardCharsets.UTF_8);
5358

services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/crt/CrtCredentialProviderAdapterTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.mockito.Mockito;
2626
import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider;
2727
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
28+
import software.amazon.awssdk.auth.credentials.AwsCredentialsProviderChain;
2829
import software.amazon.awssdk.auth.credentials.AwsSessionCredentials;
2930
import software.amazon.awssdk.auth.credentials.HttpCredentialsProvider;
3031
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
@@ -96,4 +97,21 @@ void crtCredentials_anonymousCredentialsProvider_shouldWork() {
9697
assertThat(crtCredentials.getAccessKeyId()).isNull();
9798
assertThat(crtCredentials.getSecretAccessKey()).isNull();
9899
}
100+
101+
@Test
102+
void crtCredentials_anonymousCredentialsProviderFromChain_shouldWork() {
103+
IdentityProvider<? extends AwsCredentialsIdentity> awsCredentialsProvider =
104+
AwsCredentialsProviderChain
105+
.builder()
106+
.addCredentialsProvider(AnonymousCredentialsProvider.create())
107+
.build();
108+
109+
CrtCredentialsProviderAdapter adapter = new CrtCredentialsProviderAdapter(awsCredentialsProvider);
110+
CredentialsProvider crtCredentialsProvider = adapter.crtCredentials();
111+
112+
Credentials crtCredentials = crtCredentialsProvider.getCredentials().join();
113+
114+
assertThat(crtCredentials.getAccessKeyId()).isNull();
115+
assertThat(crtCredentials.getSecretAccessKey()).isNull();
116+
}
99117
}

0 commit comments

Comments
 (0)