diff --git a/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/crt/internal/signer/AwsChunkedV4aPayloadSigner.java b/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/crt/internal/signer/AwsChunkedV4aPayloadSigner.java index 7d80636234a6..8a036b8d87e3 100644 --- a/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/crt/internal/signer/AwsChunkedV4aPayloadSigner.java +++ b/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/crt/internal/signer/AwsChunkedV4aPayloadSigner.java @@ -204,7 +204,7 @@ private long calculateExistingTrailersLength() { private long calculateTrailerLength(Pair> trailer) { // size of trailer-header and colon - long lengthInBytes = trailer.left().length() + 1; + long lengthInBytes = trailer.left().length() + 1L; // size of trailer-values for (String value : trailer.right()) { @@ -220,7 +220,7 @@ private long calculateTrailerLength(Pair> trailer) { private long calculateChecksumTrailerLength(String checksumHeaderName) { // size of checksum trailer-header and colon - long lengthInBytes = checksumHeaderName.length() + 1; + long lengthInBytes = checksumHeaderName.length() + 1L; // get the base checksum for the algorithm SdkChecksum sdkChecksum = fromChecksumAlgorithm(checksumAlgorithm); diff --git a/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/AwsChunkedV4PayloadSigner.java b/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/AwsChunkedV4PayloadSigner.java index 669dd2a4d434..fb6a203cf9f1 100644 --- a/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/AwsChunkedV4PayloadSigner.java +++ b/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/AwsChunkedV4PayloadSigner.java @@ -223,7 +223,7 @@ private long calculateExistingTrailersLength() { private long calculateTrailerLength(Pair> trailer) { // size of trailer-header and colon - long lengthInBytes = trailer.left().length() + 1; + long lengthInBytes = trailer.left().length() + 1L; // size of trailer-values for (String value : trailer.right()) { @@ -239,7 +239,7 @@ private long calculateTrailerLength(Pair> trailer) { private long calculateChecksumTrailerLength(String checksumHeaderName) { // size of checksum trailer-header and colon - long lengthInBytes = checksumHeaderName.length() + 1; + long lengthInBytes = checksumHeaderName.length() + 1L; // get the base checksum for the algorithm SdkChecksum sdkChecksum = fromChecksumAlgorithm(checksumAlgorithm); diff --git a/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/chunkedencoding/ChunkedEncodedInputStream.java b/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/chunkedencoding/ChunkedEncodedInputStream.java index 6f800d6f8ece..dacabafbf4e1 100644 --- a/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/chunkedencoding/ChunkedEncodedInputStream.java +++ b/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/chunkedencoding/ChunkedEncodedInputStream.java @@ -188,7 +188,7 @@ private void writeTrailers(ByteArrayOutputStream outputStream) throws IOExceptio } @Override - public void reset() throws IOException { + public synchronized void reset() throws IOException { trailers.forEach(TrailerProvider::reset); extensions.forEach(ChunkExtensionProvider::reset); header.reset(); diff --git a/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/util/SignerUtils.java b/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/util/SignerUtils.java index c85052da3d3a..85c4bd4824b9 100644 --- a/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/util/SignerUtils.java +++ b/core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/util/SignerUtils.java @@ -26,6 +26,7 @@ import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; +import java.util.Optional; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import software.amazon.awssdk.annotations.SdkInternalApi; @@ -190,7 +191,8 @@ public static void addDateHeader(SdkHttpRequest.Builder requestBuilder, String d * the payload is read in its entirety to calculate the length. */ public static long moveContentLength(SdkHttpRequest.Builder request, InputStream payload) { - if (!request.firstMatchingHeader(X_AMZ_DECODED_CONTENT_LENGTH).isPresent()) { + Optional decodedContentLength = request.firstMatchingHeader(X_AMZ_DECODED_CONTENT_LENGTH); + if (!decodedContentLength.isPresent()) { // if the decoded length isn't present, content-length must be there String contentLength = request.firstMatchingHeader(Header.CONTENT_LENGTH).orElseGet( () -> String.valueOf(readAll(payload)) @@ -203,7 +205,7 @@ public static long moveContentLength(SdkHttpRequest.Builder request, InputStream // decoded header is already there, so remove content-length just to be sure it's gone request.removeHeader(Header.CONTENT_LENGTH); - return Long.parseLong(request.firstMatchingHeader(X_AMZ_DECODED_CONTENT_LENGTH).get()); + return Long.parseLong(decodedContentLength.get()); } private static MessageDigest getMessageDigestInstance() {