From 0e5a768b1aaebd5c5064564c1da96d58f55de85f Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Mon, 22 Apr 2024 10:32:26 -0700 Subject: [PATCH] avoid trailing checksums for zero byte objects --- api.go | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/api.go b/api.go index 44f15c549..be60529df 100644 --- a/api.go +++ b/api.go @@ -616,6 +616,18 @@ func (c *Client) executeMethod(ctx context.Context, method string, metadata requ } } + if metadata.addCrc && metadata.contentLength > 0 { + if metadata.trailer == nil { + metadata.trailer = make(http.Header, 1) + } + crc := crc32.New(crc32.MakeTable(crc32.Castagnoli)) + metadata.contentBody = newHashReaderWrapper(metadata.contentBody, crc, func(hash []byte) { + // Update trailer when done. + metadata.trailer.Set("x-amz-checksum-crc32c", base64.StdEncoding.EncodeToString(hash)) + }) + metadata.trailer.Set("x-amz-checksum-crc32c", base64.StdEncoding.EncodeToString(crc.Sum(nil))) + } + // Create cancel context to control 'newRetryTimer' go routine. retryCtx, cancel := context.WithCancel(ctx) @@ -635,17 +647,6 @@ func (c *Client) executeMethod(ctx context.Context, method string, metadata requ } } - if metadata.addCrc { - if metadata.trailer == nil { - metadata.trailer = make(http.Header, 1) - } - crc := crc32.New(crc32.MakeTable(crc32.Castagnoli)) - metadata.contentBody = newHashReaderWrapper(metadata.contentBody, crc, func(hash []byte) { - // Update trailer when done. - metadata.trailer.Set("x-amz-checksum-crc32c", base64.StdEncoding.EncodeToString(hash)) - }) - metadata.trailer.Set("x-amz-checksum-crc32c", base64.StdEncoding.EncodeToString(crc.Sum(nil))) - } // Instantiate a new request. var req *http.Request req, err = c.newRequest(ctx, method, metadata)