Skip to content

Commit

Permalink
fix: canonical header computation for multi-spaced header values (#1025)
Browse files Browse the repository at this point in the history
  • Loading branch information
balamurugana authored and minio-trusted committed Sep 3, 2020
1 parent 364ca4e commit d26d52c
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
14 changes: 13 additions & 1 deletion api/src/main/java/io/minio/Signer.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.stream.Collectors;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import okhttp3.Headers;
Expand Down Expand Up @@ -142,7 +143,18 @@ private void setCanonicalHeaders() {
for (String name : headers.names()) {
String signedHeader = name.toLowerCase(Locale.US);
if (!IGNORED_HEADERS.contains(signedHeader)) {
this.canonicalHeaders.put(signedHeader, headers.get(name));
// Convert and add header values as per
// https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
// * Header having multiple values should be converted to comma separated values.
// * Multi-spaced value of header should be trimmed to single spaced value.
this.canonicalHeaders.put(
signedHeader,
headers.values(name).stream()
.map(
value -> {
return value.replaceAll("( +)", " ");
})
.collect(Collectors.joining(",")));
}
}

Expand Down
2 changes: 2 additions & 0 deletions functional/FunctionalTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -846,6 +846,8 @@ public static void putObject_test() throws Exception {

Map<String, String> userMetadata = new HashMap<>();
userMetadata.put("My-Project", "Project One");
userMetadata.put("My-header1", " a b c ");
userMetadata.put("My-Header2", "\"a b c\"");

testPutObject(
"[user metadata]",
Expand Down

0 comments on commit d26d52c

Please sign in to comment.