Skip to content

Commit 291e457

Browse files
committed
ChecksumInterceptor.h - use memory safe Aws::Array instead of Aws::UnorderedMap
1 parent ddeb5ed commit 291e457

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

src/aws-cpp-sdk-core/include/smithy/client/features/ChecksumInterceptor.h

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <aws/core/utils/crypto/Sha1.h>
1717
#include <aws/core/utils/crypto/Sha256.h>
1818
#include <smithy/interceptor/Interceptor.h>
19+
#include <aws/core/utils/memory/stl/AWSArray.h>
1920

2021
#include <iomanip>
2122

@@ -186,30 +187,30 @@ class ChecksumInterceptor : public smithy::interceptor::Interceptor {
186187

187188
void calculateAndSetChecksum(const Aws::AmazonWebServiceRequest& request, std::shared_ptr<Aws::Http::HttpRequest> httpRequest,
188189
const Aws::String& algorithm, const Aws::String& checksumType) {
189-
static const Aws::UnorderedMap<Aws::String, ChecksumHandler> algorithmMap = {
190-
{"crc64nvme",
191-
{[]() { return Aws::MakeShared<CRC64>(AWS_SMITHY_CLIENT_CHECKSUM); },
190+
static const Aws::Array<std::pair<const char*, ChecksumHandler>, 5> algorithmMap = {{
191+
std::make_pair("crc64nvme", ChecksumHandler{
192+
[]() { return Aws::MakeShared<CRC64>(AWS_SMITHY_CLIENT_CHECKSUM); },
192193
[](Aws::IOStream& stream) { return HashingUtils::Base64Encode(HashingUtils::CalculateCRC64(stream)); },
193-
Aws::Client::UserAgentFeature::FLEXIBLE_CHECKSUMS_REQ_CRC64}},
194-
{"crc32",
195-
{[]() { return Aws::MakeShared<CRC32>(AWS_SMITHY_CLIENT_CHECKSUM); },
194+
Aws::Client::UserAgentFeature::FLEXIBLE_CHECKSUMS_REQ_CRC64}),
195+
std::make_pair("crc32", ChecksumHandler{
196+
[]() { return Aws::MakeShared<CRC32>(AWS_SMITHY_CLIENT_CHECKSUM); },
196197
[](Aws::IOStream& stream) { return HashingUtils::Base64Encode(HashingUtils::CalculateCRC32(stream)); },
197-
Aws::Client::UserAgentFeature::FLEXIBLE_CHECKSUMS_REQ_CRC32}},
198-
{"crc32c",
199-
{[]() { return Aws::MakeShared<CRC32C>(AWS_SMITHY_CLIENT_CHECKSUM); },
198+
Aws::Client::UserAgentFeature::FLEXIBLE_CHECKSUMS_REQ_CRC32}),
199+
std::make_pair("crc32c", ChecksumHandler{
200+
[]() { return Aws::MakeShared<CRC32C>(AWS_SMITHY_CLIENT_CHECKSUM); },
200201
[](Aws::IOStream& stream) { return HashingUtils::Base64Encode(HashingUtils::CalculateCRC32C(stream)); },
201-
Aws::Client::UserAgentFeature::FLEXIBLE_CHECKSUMS_REQ_CRC32C}},
202-
{"sha256",
203-
{[]() { return Aws::MakeShared<Sha256>(AWS_SMITHY_CLIENT_CHECKSUM); },
202+
Aws::Client::UserAgentFeature::FLEXIBLE_CHECKSUMS_REQ_CRC32C}),
203+
std::make_pair("sha256", ChecksumHandler{
204+
[]() { return Aws::MakeShared<Sha256>(AWS_SMITHY_CLIENT_CHECKSUM); },
204205
[](Aws::IOStream& stream) { return HashingUtils::Base64Encode(HashingUtils::CalculateSHA256(stream)); },
205-
Aws::Client::UserAgentFeature::FLEXIBLE_CHECKSUMS_REQ_SHA256}},
206-
{"sha1",
207-
{[]() { return Aws::MakeShared<Sha1>(AWS_SMITHY_CLIENT_CHECKSUM); },
206+
Aws::Client::UserAgentFeature::FLEXIBLE_CHECKSUMS_REQ_SHA256}),
207+
std::make_pair("sha1", ChecksumHandler{
208+
[]() { return Aws::MakeShared<Sha1>(AWS_SMITHY_CLIENT_CHECKSUM); },
208209
[](Aws::IOStream& stream) { return HashingUtils::Base64Encode(HashingUtils::CalculateSHA1(stream)); },
209-
Aws::Client::UserAgentFeature::FLEXIBLE_CHECKSUMS_REQ_SHA1}}
210-
};
210+
Aws::Client::UserAgentFeature::FLEXIBLE_CHECKSUMS_REQ_SHA1})
211+
}};
211212

212-
auto it = algorithmMap.find(algorithm);
213+
const auto it = find_if(algorithmMap.begin(), algorithmMap.end(), [&](const std::pair<const char*, ChecksumHandler> &pair) { return algorithm == pair.first; });
213214
if (it == algorithmMap.end()) {
214215
AWS_LOGSTREAM_WARN(AWS_SMITHY_CLIENT_CHECKSUM, "Checksum algorithm: " << algorithm << " is not supported by SDK.");
215216
return;

0 commit comments

Comments
 (0)