Skip to content

Commit 7fde896

Browse files
committed
aws: fix bug in multipart copy when sha256 checksum is specificed
1 parent 68b24de commit 7fde896

File tree

2 files changed

+19
-17
lines changed

2 files changed

+19
-17
lines changed

src/aws/client.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -721,24 +721,24 @@ impl S3Client {
721721
// If SSE-C is used, we must include the encryption headers in every upload request.
722722
request = request.with_encryption_headers();
723723
}
724+
724725
let (parts, body) = request.send().await?.into_parts();
725-
let checksum_sha256 = parts
726-
.headers
727-
.get(SHA256_CHECKSUM)
728-
.and_then(|v| v.to_str().ok())
729-
.map(|v| v.to_string());
730-
731-
let e_tag = match is_copy {
732-
false => get_etag(&parts.headers).map_err(|source| Error::Metadata { source })?,
733-
true => {
734-
let response = body
735-
.bytes()
736-
.await
737-
.map_err(|source| Error::CreateMultipartResponseBody { source })?;
738-
let response: CopyPartResult = quick_xml::de::from_reader(response.reader())
739-
.map_err(|source| Error::InvalidMultipartResponse { source })?;
740-
response.e_tag
741-
}
726+
let (e_tag, checksum_sha256) = if is_copy {
727+
let response = body
728+
.bytes()
729+
.await
730+
.map_err(|source| Error::CreateMultipartResponseBody { source })?;
731+
let response: CopyPartResult = quick_xml::de::from_reader(response.reader())
732+
.map_err(|source| Error::InvalidMultipartResponse { source })?;
733+
(response.e_tag, response.checksum_sha256)
734+
} else {
735+
let e_tag = get_etag(&parts.headers).map_err(|source| Error::Metadata { source })?;
736+
let checksum_sha256 = parts
737+
.headers
738+
.get(SHA256_CHECKSUM)
739+
.and_then(|v| v.to_str().ok())
740+
.map(|v| v.to_string());
741+
(e_tag, checksum_sha256)
742742
};
743743

744744
let content_id = if self.config.checksum == Some(Checksum::SHA256) {

src/client/s3.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ pub(crate) struct InitiateMultipartUploadResult {
9898
pub(crate) struct CopyPartResult {
9999
#[serde(rename = "ETag")]
100100
pub e_tag: String,
101+
#[serde(default, rename = "ChecksumSHA256")]
102+
pub checksum_sha256: Option<String>,
101103
}
102104

103105
#[derive(Debug, Serialize)]

0 commit comments

Comments
 (0)