From 1ea31e6ac850944182a63d3d36b27b3d859958dd Mon Sep 17 00:00:00 2001 From: SergeyRyabinin Date: Thu, 20 Mar 2025 19:19:47 +0000 Subject: [PATCH] Fix segfault added by #3349: curl handle maybe destroyed --- .../source/http/curl/CurlHttpClient.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) 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 97c011a3499f..35c718458d57 100644 --- a/src/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp +++ b/src/aws-cpp-sdk-core/source/http/curl/CurlHttpClient.cpp @@ -860,6 +860,7 @@ std::shared_ptr CurlHttpClient::MakeRequest(const std::shared_ptr< OverrideOptionsOnConnectionHandle(connectionHandle); Aws::Utils::DateTime startTransmissionTime = Aws::Utils::DateTime::Now(); CURLcode curlResponseCode = curl_easy_perform(connectionHandle); + curl_easy_setopt(connectionHandle, CURLOPT_ERRORBUFFER, nullptr); bool shouldContinueRequest = ContinueRequest(*request); if (curlResponseCode != CURLE_OK && shouldContinueRequest) { @@ -968,14 +969,12 @@ std::shared_ptr CurlHttpClient::MakeRequest(const std::shared_ptr< { request->SetResolvedRemoteHost(ip); } - if (curlResponseCode != CURLE_OK) - { + if (curlResponseCode != CURLE_OK) { m_curlHandleContainer.DestroyCurlHandle(connectionHandle); - } - else - { + } else { m_curlHandleContainer.ReleaseCurlHandle(connectionHandle); } + connectionHandle = nullptr; //go ahead and flush the response body stream response->GetResponseBody().flush(); if (response->GetResponseBody().fail()) { @@ -987,8 +986,6 @@ std::shared_ptr CurlHttpClient::MakeRequest(const std::shared_ptr< AWS_LOGSTREAM_ERROR(CURL_HTTP_CLIENT_TAG, ss.str()); } request->AddRequestMetric(GetHttpClientMetricNameByType(HttpClientMetricsType::RequestLatency), (DateTime::Now() - startTransmissionTime).count()); - - curl_easy_setopt(connectionHandle, CURLOPT_ERRORBUFFER, nullptr); } if (headers)