From 7042814adcfea9c5eae87f2e8eb20abf44f116bc Mon Sep 17 00:00:00 2001 From: sbaluja Date: Mon, 26 Oct 2026 11:53:05 -0400 Subject: [PATCH 1/2] Avoid per-chunk std::stringstream in response checksum header lookup --- src/aws-cpp-sdk-core/source/http/crt/CRTHttpClient.cpp | 4 +--- src/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp | 4 +--- .../source/http/windows/WinSyncHttpClient.cpp | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/aws-cpp-sdk-core/source/http/crt/CRTHttpClient.cpp b/src/aws-cpp-sdk-core/source/http/crt/CRTHttpClient.cpp index bc2b7ee7cb84..057b9f5ea807 100644 --- a/src/aws-cpp-sdk-core/source/http/crt/CRTHttpClient.cpp +++ b/src/aws-cpp-sdk-core/source/http/crt/CRTHttpClient.cpp @@ -60,9 +60,7 @@ void OnResponseBodyReceived(Aws::Crt::Http::HttpStream&, const Aws::Crt::ByteCur const std::shared_ptr& request) { assert(response); for (const auto& hashIterator : request->GetResponseValidationHashes()) { - std::stringstream headerStr; - headerStr << "x-amz-checksum-" << hashIterator.first; - if (response->HasHeader(headerStr.str().c_str())) { + if (response->HasHeader(("x-amz-checksum-" + hashIterator.first).c_str())) { hashIterator.second->Update(reinterpret_cast(body.ptr), body.len); break; } diff --git a/src/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp b/src/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp index 119fd788b74a..e8800631575f 100644 --- a/src/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp +++ b/src/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp @@ -203,9 +203,7 @@ static size_t WriteData(char* ptr, size_t size, size_t nmemb, void* userdata) for (const auto& hashIterator : context->m_request->GetResponseValidationHashes()) { - std::stringstream headerStr; - headerStr<<"x-amz-checksum-"<m_response->HasHeader(headerStr.str().c_str())) + if(context->m_response->HasHeader(("x-amz-checksum-" + hashIterator.first).c_str())) { hashIterator.second->Update(reinterpret_cast(ptr), sizeToWrite); break; diff --git a/src/aws-cpp-sdk-core/source/http/windows/WinSyncHttpClient.cpp b/src/aws-cpp-sdk-core/source/http/windows/WinSyncHttpClient.cpp index afee408a170c..6e538e152378 100644 --- a/src/aws-cpp-sdk-core/source/http/windows/WinSyncHttpClient.cpp +++ b/src/aws-cpp-sdk-core/source/http/windows/WinSyncHttpClient.cpp @@ -249,9 +249,7 @@ bool WinSyncHttpClient::BuildSuccessResponse(const std::shared_ptr& { for (const auto& hashIterator : request->GetResponseValidationHashes()) { - std::stringstream headerStr; - headerStr<<"x-amz-checksum-"<HasHeader(headerStr.str().c_str())) + if(response->HasHeader(("x-amz-checksum-" + hashIterator.first).c_str())) { hashIterator.second->Update(reinterpret_cast(dst), static_cast(read)); break; From 990e07155064164cfd9f9a667b1eeb63de568ea1 Mon Sep 17 00:00:00 2001 From: sbaluja Date: Mon, 26 Oct 2026 11:54:44 -0400 Subject: [PATCH 2/2] changelog --- .changelog/bugfix-fix-response-checksum-stringstream.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changelog/bugfix-fix-response-checksum-stringstream.json diff --git a/.changelog/bugfix-fix-response-checksum-stringstream.json b/.changelog/bugfix-fix-response-checksum-stringstream.json new file mode 100644 index 000000000000..73647981bdea --- /dev/null +++ b/.changelog/bugfix-fix-response-checksum-stringstream.json @@ -0,0 +1,6 @@ +{ + "type": "bugfix", + "category": "aws-cpp-sdk-core", + "contributor": "sbaluja", + "description": "Avoid per-chunk std::stringstream in response checksum header lookup" +}