Skip to content

Commit 975dfba

Browse files
fix: guard Optional.get() in delete, close FileReader, guard empty form-encode
- VaultController.delete: replace unguarded getRecordIdResponse().get() with .orElse(Collections.emptyList()) so an absent field in the API response returns an empty list instead of throwing NoSuchElementException (M2) - BearerToken, SignedDataTokens: wrap FileReader in try/finally to guarantee close() is called even when JsonParser throws JsonSyntaxException; close IOException is intentionally swallowed since the parse already completed (M3) - HttpUtility.formatJsonToFormEncodedString: guard against empty entry set so substring(0, -1) is not called on an empty StringBuilder (M4) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 033c061 commit 975dfba

4 files changed

Lines changed: 17 additions & 6 deletions

File tree

src/main/java/com/skyflow/serviceaccount/util/BearerToken.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.io.File;
2121
import java.io.FileNotFoundException;
2222
import java.io.FileReader;
23+
import java.io.IOException;
2324
import java.net.MalformedURLException;
2425
import java.security.PrivateKey;
2526
import java.util.ArrayList;
@@ -58,8 +59,12 @@ private static V1GetAuthTokenResponse generateBearerTokenFromCredentials(
5859
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidCredentials.getMessage());
5960
}
6061
FileReader reader = new FileReader(String.valueOf(credentialsFile));
61-
JsonObject serviceAccountCredentials = JsonParser.parseReader(reader).getAsJsonObject();
62-
return getBearerTokenFromCredentials(serviceAccountCredentials, context, roles);
62+
try {
63+
JsonObject serviceAccountCredentials = JsonParser.parseReader(reader).getAsJsonObject();
64+
return getBearerTokenFromCredentials(serviceAccountCredentials, context, roles);
65+
} finally {
66+
try { reader.close(); } catch (IOException ignored) {}
67+
}
6368
} catch (JsonSyntaxException e) {
6469
LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_FILE_FORMAT.getLog());
6570
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString(

src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.io.File;
1717
import java.io.FileNotFoundException;
1818
import java.io.FileReader;
19+
import java.io.IOException;
1920
import java.security.PrivateKey;
2021
import java.util.ArrayList;
2122
import java.util.Date;
@@ -55,8 +56,12 @@ private static List<SignedDataTokenResponse> generateSignedTokenFromCredentialsF
5556
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidCredentials.getMessage());
5657
}
5758
FileReader reader = new FileReader(String.valueOf(credentialsFile));
58-
JsonObject serviceAccountCredentials = JsonParser.parseReader(reader).getAsJsonObject();
59-
responseToken = generateSignedTokensFromCredentials(serviceAccountCredentials, dataTokens, timeToLive, context);
59+
try {
60+
JsonObject serviceAccountCredentials = JsonParser.parseReader(reader).getAsJsonObject();
61+
responseToken = generateSignedTokensFromCredentials(serviceAccountCredentials, dataTokens, timeToLive, context);
62+
} finally {
63+
try { reader.close(); } catch (IOException ignored) {}
64+
}
6065
} catch (JsonSyntaxException e) {
6166
LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_FILE_FORMAT.getLog());
6267
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString(

src/main/java/com/skyflow/utils/HttpUtility.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public static String formatJsonToFormEncodedString(JsonObject requestBody) {
121121
for (Map.Entry<String, String> currentEntry : jsonMap.entrySet())
122122
formEncodeString.append(makeFormEncodeKeyValuePair(currentEntry.getKey(), currentEntry.getValue()));
123123

124-
return formEncodeString.substring(0, formEncodeString.length() - 1);
124+
return formEncodeString.length() == 0 ? "" : formEncodeString.substring(0, formEncodeString.length() - 1);
125125
}
126126

127127
public static String formatJsonToMultiPartFormDataString(JsonObject requestBody, String boundary) {

src/main/java/com/skyflow/vault/controller/VaultController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.File;
44
import java.io.IOException;
55
import java.util.ArrayList;
6+
import java.util.Collections;
67
import java.util.HashMap;
78
import java.util.List;
89
import java.util.Map;
@@ -371,7 +372,7 @@ public DeleteResponse delete(DeleteRequest deleteRequest) throws SkyflowExceptio
371372
throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString);
372373
}
373374
LogUtil.printInfoLog(InfoLogs.DELETE_SUCCESS.getLog());
374-
return new DeleteResponse(result.getRecordIdResponse().get());
375+
return new DeleteResponse(result.getRecordIdResponse().orElse(Collections.emptyList()));
375376
}
376377

377378
public QueryResponse query(QueryRequest queryRequest) throws SkyflowException {

0 commit comments

Comments
 (0)