Skip to content

Commit 0e5a768

Browse files
avoid trailing checksums for zero byte objects
1 parent afa8d59 commit 0e5a768

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

api.go

+12-11
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,18 @@ func (c *Client) executeMethod(ctx context.Context, method string, metadata requ
616616
}
617617
}
618618

619+
if metadata.addCrc && metadata.contentLength > 0 {
620+
if metadata.trailer == nil {
621+
metadata.trailer = make(http.Header, 1)
622+
}
623+
crc := crc32.New(crc32.MakeTable(crc32.Castagnoli))
624+
metadata.contentBody = newHashReaderWrapper(metadata.contentBody, crc, func(hash []byte) {
625+
// Update trailer when done.
626+
metadata.trailer.Set("x-amz-checksum-crc32c", base64.StdEncoding.EncodeToString(hash))
627+
})
628+
metadata.trailer.Set("x-amz-checksum-crc32c", base64.StdEncoding.EncodeToString(crc.Sum(nil)))
629+
}
630+
619631
// Create cancel context to control 'newRetryTimer' go routine.
620632
retryCtx, cancel := context.WithCancel(ctx)
621633

@@ -635,17 +647,6 @@ func (c *Client) executeMethod(ctx context.Context, method string, metadata requ
635647
}
636648
}
637649

638-
if metadata.addCrc {
639-
if metadata.trailer == nil {
640-
metadata.trailer = make(http.Header, 1)
641-
}
642-
crc := crc32.New(crc32.MakeTable(crc32.Castagnoli))
643-
metadata.contentBody = newHashReaderWrapper(metadata.contentBody, crc, func(hash []byte) {
644-
// Update trailer when done.
645-
metadata.trailer.Set("x-amz-checksum-crc32c", base64.StdEncoding.EncodeToString(hash))
646-
})
647-
metadata.trailer.Set("x-amz-checksum-crc32c", base64.StdEncoding.EncodeToString(crc.Sum(nil)))
648-
}
649650
// Instantiate a new request.
650651
var req *http.Request
651652
req, err = c.newRequest(ctx, method, metadata)

0 commit comments

Comments
 (0)