From 9b0eaa1b3fb2ec814aa8174e0d4c32c42128e8b7 Mon Sep 17 00:00:00 2001 From: xibz Date: Tue, 12 Apr 2016 13:52:36 -0700 Subject: [PATCH] Fix to not hash again if Checksum is set --- service/glacier/customizations.go | 14 +++++--------- service/glacier/customizations_test.go | 13 +++++++++++++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/service/glacier/customizations.go b/service/glacier/customizations.go index fd57017248c..613606019b7 100644 --- a/service/glacier/customizations.go +++ b/service/glacier/customizations.go @@ -37,20 +37,16 @@ func addAccountID(r *request.Request) { } func addChecksum(r *request.Request) { - if r.Body == nil { + if r.Body == nil || r.HTTPRequest.Header.Get("X-Amz-Sha256-Tree-Hash") != "" { return } h := ComputeHashes(r.Body) + hstr := hex.EncodeToString(h.TreeHash) + r.HTTPRequest.Header.Set("X-Amz-Sha256-Tree-Hash", hstr) - if r.HTTPRequest.Header.Get("X-Amz-Content-Sha256") == "" { - hstr := hex.EncodeToString(h.LinearHash) - r.HTTPRequest.Header.Set("X-Amz-Content-Sha256", hstr) - } - if r.HTTPRequest.Header.Get("X-Amz-Sha256-Tree-Hash") == "" { - hstr := hex.EncodeToString(h.TreeHash) - r.HTTPRequest.Header.Set("X-Amz-Sha256-Tree-Hash", hstr) - } + hLstr := hex.EncodeToString(h.LinearHash) + r.HTTPRequest.Header.Set("X-Amz-Content-Sha256", hLstr) } func addAPIVersion(r *request.Request) { diff --git a/service/glacier/customizations_test.go b/service/glacier/customizations_test.go index 2825b81c7aa..15b7a8ec66b 100644 --- a/service/glacier/customizations_test.go +++ b/service/glacier/customizations_test.go @@ -75,3 +75,16 @@ func TestFillAccountIDWithNilStruct(t *testing.T) { assert.Equal(t, empty, req.HTTPRequest.Header.Get("x-amz-content-sha256")) assert.Equal(t, "", req.HTTPRequest.Header.Get("x-amz-sha256-tree-hash")) } + +func TestHashOnce(t *testing.T) { + req, _ := svc.UploadArchiveRequest(&glacier.UploadArchiveInput{ + VaultName: aws.String("vault"), + Body: payloadBuf, + }) + req.HTTPRequest.Header.Set("X-Amz-Sha256-Tree-Hash", "0") + + err := req.Build() + assert.NoError(t, err) + + assert.Equal(t, "0", req.HTTPRequest.Header.Get("x-amz-sha256-tree-hash")) +}