From edde9fb4ee872b71983c576c73be9ae34f9fecb4 Mon Sep 17 00:00:00 2001 From: Ralph Sennhauser Date: Thu, 2 Jan 2025 20:02:48 +0100 Subject: [PATCH] Avoid segfault with curl 8.10/8.11 With curl 8.10 [1] calling curl_multi_remove_handle retruns CURLM_BAD_EASY_HANDLE iff the handle was removed already and no other easy handle were registered. This resulted in ENUSRE triggering a segfault during shutdown as reported. This was fixed upstream after 8.11.1 [2]. Do a runtime version check and for affected version allow CURLM_BAD_EASY_HANDLE. [1] curl ba235ab269080dc66e35835c829f7ac4290dbc1d [2] curl 713182bd196bba014ba77f71176fea3de2236724 Fixes: #7295 Signed-off-by: Ralph Sennhauser --- source/ps/ModIo.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/ps/ModIo.cpp b/source/ps/ModIo.cpp index ee486e9540..3a56fa3fd7 100644 --- a/source/ps/ModIo.cpp +++ b/source/ps/ModIo.cpp @@ -237,7 +237,17 @@ CURLMcode ModIo::SetupRequest(const std::string& url, bool fileDownload) void ModIo::TearDownRequest() { - ENSURE(curl_multi_remove_handle(m_CurlMulti, m_Curl) == CURLM_OK); + const curl_version_info_data* info = curl_version_info(CURLVERSION_NOW); + const CURLMcode code = curl_multi_remove_handle(m_CurlMulti, m_Curl); + if (info->version_num >= 0x080a00 && info->version_num < 0x080b02) + { + // Version 8.10.0 through 8.11.1 return CURLM_BAD_EASY_HANDLE + ENSURE(code == CURLM_OK || code == CURLM_BAD_EASY_HANDLE); + } + else + { + ENSURE(code == CURLM_OK); + } if (m_CallbackData) {