Skip to content

Commit 0a236dc

Browse files
committed
Review comments
- Update variable naming - Throw if decoded content length not present - Throw if input request doesn't have content-length header
1 parent 7cd278b commit 0a236dc

File tree

4 files changed

+35
-32
lines changed

4 files changed

+35
-32
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,11 @@ private void signCommon(ChunkedEncodedPayload payload, V4RequestSigningResult re
118118

119119
payload.decodedContentLength(request.firstMatchingHeader(X_AMZ_DECODED_CONTENT_LENGTH)
120120
.map(Long::parseLong)
121-
.orElse(0L));
121+
.orElseThrow(() -> {
122+
String msg = String.format("Expected header '%s' to be present",
123+
X_AMZ_DECODED_CONTENT_LENGTH);
124+
return new RuntimeException(msg);
125+
}));
122126

123127
String checksum = request.firstMatchingHeader(X_AMZ_CONTENT_SHA256).orElseThrow(
124128
() -> new IllegalArgumentException(X_AMZ_CONTENT_SHA256 + " must be set!")

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/chunkedencoding/ChunkedEncodedPublisher.java

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -275,60 +275,60 @@ protected ChunkingSubscriber(Subscriber<? super Iterable<ByteBuffer>> subscriber
275275
}
276276

277277
@Override
278-
public void onNext(ByteBuffer inputBuffer) {
279-
long totalBufferedBytes = (long) chunkBuffer.position() + inputBuffer.remaining();
278+
public void onNext(ByteBuffer incomingData) {
279+
long totalAvailableBytes = (long) chunkBuffer.position() + incomingData.remaining();
280280
// compute the number full chunks we have currently
281-
int nBufferedChunks = (int) (totalBufferedBytes / chunkSize);
281+
int numCompleteChunks = (int) (totalAvailableBytes / chunkSize);
282282

283-
List<ByteBuffer> chunks = new ArrayList<>(nBufferedChunks);
283+
List<ByteBuffer> encodedChunks = new ArrayList<>(numCompleteChunks);
284284

285-
if (nBufferedChunks > 0) {
286-
// We have some data from the previous inputBuffer
285+
if (numCompleteChunks > 0) {
286+
// We have some data from the previous incomingData
287287
if (chunkBuffer.position() > 0) {
288288
int bytesToFill = chunkBuffer.remaining();
289289

290-
ByteBuffer slice = inputBuffer.slice();
290+
ByteBuffer dataToFillBuffer = incomingData.slice();
291291

292-
slice.limit(slice.position() + bytesToFill);
293-
inputBuffer.position(inputBuffer.position() + bytesToFill);
292+
dataToFillBuffer.limit(dataToFillBuffer.position() + bytesToFill);
293+
incomingData.position(incomingData.position() + bytesToFill);
294294

295-
// At this point, we know chunkBuffer is full since inputBuffer has at least enough bytes to make up a full
295+
// At this point, we know chunkBuffer is full since incomingData has at least enough bytes to make up a full
296296
// chunk along with the data already in chunkBuffer
297-
chunkBuffer.put(slice);
297+
chunkBuffer.put(dataToFillBuffer);
298298
chunkBuffer.flip();
299-
chunks.add(encodeChunk(chunkBuffer));
299+
encodedChunks.add(encodeChunk(chunkBuffer));
300300

301301
chunkBuffer.flip();
302302

303-
nBufferedChunks--;
303+
numCompleteChunks--;
304304
}
305305

306-
// Now encode all the remaining full chunks from inputBuffer.
307-
// At this point chunkBuffer has no data in it; slice off chunks from inputBuffer and encode directly
308-
for (int i = 0; i < nBufferedChunks; i++) {
309-
ByteBuffer slice = inputBuffer.slice();
306+
// Now encode all the remaining full chunks from incomingData.
307+
// At this point chunkBuffer has no data in it; slice off chunks from incomingData and encode directly
308+
for (int i = 0; i < numCompleteChunks; i++) {
309+
ByteBuffer chunkData = incomingData.slice();
310310

311-
int sliceLimit = Math.min(slice.limit(), chunkSize);
312-
slice.limit(sliceLimit);
311+
int maxChunkBytes = Math.min(chunkData.limit(), chunkSize);
312+
chunkData.limit(maxChunkBytes);
313313

314-
inputBuffer.position(inputBuffer.position() + slice.remaining());
314+
incomingData.position(incomingData.position() + chunkData.remaining());
315315

316-
if (slice.remaining() >= chunkSize) {
317-
slice.limit(slice.position() + chunkSize);
318-
chunks.add(encodeChunk(slice));
316+
if (chunkData.remaining() >= chunkSize) {
317+
chunkData.limit(chunkData.position() + chunkSize);
318+
encodedChunks.add(encodeChunk(chunkData));
319319
} else {
320-
chunkBuffer.put(slice);
320+
chunkBuffer.put(chunkData);
321321
}
322322
}
323323

324-
if (inputBuffer.hasRemaining()) {
325-
chunkBuffer.put(inputBuffer);
324+
if (incomingData.hasRemaining()) {
325+
chunkBuffer.put(incomingData);
326326
}
327327
} else {
328-
chunkBuffer.put(inputBuffer);
328+
chunkBuffer.put(incomingData);
329329
}
330330

331-
subscriber.onNext(chunks);
331+
subscriber.onNext(encodedChunks);
332332
}
333333
}
334334

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/util/SignerUtils.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,7 @@ public static CompletableFuture<Pair<SdkHttpRequest.Builder, Optional<Publisher<
248248
if (contentPublisher == null) {
249249
contentLengthFuture = CompletableFuture.completedFuture(0L);
250250
} else {
251-
LengthCalculatingSubscriber lengthCalculatingSubscriber = new LengthCalculatingSubscriber();
252-
contentPublisher.subscribe(lengthCalculatingSubscriber);
253-
contentLengthFuture = lengthCalculatingSubscriber.contentLengthFuture();
251+
throw new UnsupportedOperationException("Content-Length header must be specified");
254252
}
255253
}
256254

core/http-auth-aws/src/test/java/software/amazon/awssdk/http/auth/aws/TestUtils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public static <T extends AwsCredentialsIdentity> AsyncSignRequest<T> generateBas
6868
.protocol("https")
6969
.method(SdkHttpMethod.POST)
7070
.putHeader("Host", "demo.us-east-1.amazonaws.com")
71+
.putHeader("content-length", Integer.toString(testPayload().length))
7172
.putHeader("x-amz-archive-description", "test test")
7273
.encodedPath("/")
7374
.uri(URI.create("https://demo.us-east-1.amazonaws.com"))

0 commit comments

Comments
 (0)