Skip to content

Commit bc4a6b0

Browse files
authored
Fix race condition that could cause a NullPointerException to be raised from ProfileCredentialsProvider. (#3785)
1 parent 71cfc0f commit bc4a6b0

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"contributor": "",
4+
"type": "bugfix",
5+
"description": "Fix race condition that could cause a NullPointerException to be raised from ProfileCredentialsProvider."
6+
}

core/auth/src/main/java/software/amazon/awssdk/auth/credentials/ProfileCredentialsProvider.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public final class ProfileCredentialsProvider
5656
private final String profileName;
5757
private final Supplier<ProfileFile> defaultProfileFileLoader;
5858

59+
private final Object credentialsProviderLock = new Object();
60+
5961
/**
6062
* @see #builder()
6163
*/
@@ -117,9 +119,9 @@ public AwsCredentials resolveCredentials() {
117119
}
118120

119121
ProfileFile cachedOrRefreshedProfileFile = refreshProfileFile();
120-
if (isNewProfileFile(cachedOrRefreshedProfileFile)) {
121-
synchronized (this) {
122-
if (isNewProfileFile(cachedOrRefreshedProfileFile)) {
122+
if (shouldUpdateCredentialsProvider(cachedOrRefreshedProfileFile)) {
123+
synchronized (credentialsProviderLock) {
124+
if (shouldUpdateCredentialsProvider(cachedOrRefreshedProfileFile)) {
123125
currentProfileFile = cachedOrRefreshedProfileFile;
124126
handleProfileFileReload(cachedOrRefreshedProfileFile);
125127
}
@@ -137,8 +139,8 @@ private ProfileFile refreshProfileFile() {
137139
return profileFile.get();
138140
}
139141

140-
private boolean isNewProfileFile(ProfileFile profileFile) {
141-
return !Objects.equals(currentProfileFile, profileFile);
142+
private boolean shouldUpdateCredentialsProvider(ProfileFile profileFile) {
143+
return credentialsProvider == null || !Objects.equals(currentProfileFile, profileFile);
142144
}
143145

144146
@Override

0 commit comments

Comments
 (0)