From e0b915a3c34053ff0e08dab0184cfad55b4a4aea Mon Sep 17 00:00:00 2001 From: sbiscigl Date: Thu, 28 May 2026 16:57:11 -0400 Subject: [PATCH] Only calculate full body checksum for checksums that support it --- .../source/transfer/TransferManager.cpp | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp b/src/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp index addee26d984..506b3c40245 100644 --- a/src/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp +++ b/src/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp @@ -407,18 +407,18 @@ namespace Aws bool isRetry = !handle->GetMultiPartId().empty(); uint64_t sentBytes = 0; - const auto fullObjectHashCalculator = [](const std::shared_ptr& handle, bool isRetry, S3::Model::ChecksumAlgorithm algorithm) -> std::shared_ptr { + const auto fullObjectHashCalculator = [](const std::shared_ptr& handle, bool isRetry, + S3::Model::ChecksumAlgorithm algorithm) -> std::shared_ptr { if (handle->GetChecksum().empty() && !isRetry) { - if (algorithm == S3::Model::ChecksumAlgorithm::CRC32 || algorithm == S3::Model::ChecksumAlgorithm::CRC32C) { - return Aws::MakeShared("TransferManager"); + if (algorithm == S3::Model::ChecksumAlgorithm::CRC64NVME) { + return Aws::MakeShared("TransferManager"); } - if (algorithm == S3::Model::ChecksumAlgorithm::SHA1) { - return Aws::MakeShared("TransferManager"); + if (algorithm == S3::Model::ChecksumAlgorithm::CRC32) { + return Aws::MakeShared("TransferManager"); } - if (algorithm == S3::Model::ChecksumAlgorithm::SHA256) { - return Aws::MakeShared("TransferManager"); + if (algorithm == S3::Model::ChecksumAlgorithm::CRC32C) { + return Aws::MakeShared("TransferManager"); } - return Aws::MakeShared("TransferManager"); } return nullptr; }(handle, isRetry, m_transferConfig.checksumAlgorithm); @@ -432,6 +432,10 @@ namespace Aws createMultipartRequest.SetKey(handle->GetKey()); createMultipartRequest.SetMetadata(handle->GetMetadata()); + if (fullObjectHashCalculator) { + createMultipartRequest.SetChecksumType(Aws::S3::Model::ChecksumType::FULL_OBJECT); + } + auto createMultipartResponse = m_transferConfig.s3Client->CreateMultipartUpload(createMultipartRequest); if (createMultipartResponse.IsSuccess()) { handle->SetMultipartId(createMultipartResponse.GetResult().GetUploadId());