Skip to content

Commit 6fe5c9e

Browse files
committed
Don't pass payload to CRT if stream signing
1 parent f5876e0 commit 6fe5c9e

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/crt/internal/signer/DefaultAwsCrtV4aHttpSigner.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,13 @@ private static CompletableFuture<AsyncSignedRequest> doSignAsync(AsyncSignReques
269269
// We disallow unknown content length on the async path
270270
long contentLength = getDecodedContentLengthOrThrow(requestToSign);
271271

272-
HttpRequest crtRequest = toCrtRequest(requestToSign, requestPayload, contentLength);
272+
HttpRequest crtRequest;
273+
// If it's a streaming payload, don't pass the payload to CRT. We're handling streaming signing.
274+
if (isStreamingSha256(requestToSign)) {
275+
crtRequest = toCrtRequest(requestToSign, null, 0L);
276+
} else {
277+
crtRequest = toCrtRequest(requestToSign, requestPayload, contentLength);
278+
}
273279

274280
V4aRequestSigningResult requestSigningResult = sign(requestToSign, crtRequest, signingConfig);
275281

@@ -324,4 +330,10 @@ private static PayloadChecksumStore checksumStore(BaseSignRequest<?, ?> request)
324330
}
325331
return cache;
326332
}
333+
334+
private static boolean isStreamingSha256(SdkHttpRequest request) {
335+
return request.firstMatchingHeader("x-amz-content-sha256")
336+
.map(s -> s.startsWith("STREAMING"))
337+
.orElse(false);
338+
}
327339
}

0 commit comments

Comments
 (0)