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 <ralph.sennhauser@gmail.com>
This commit is contained in:
Ralph Sennhauser
2025-01-02 20:02:48 +01:00
parent c798a12815
commit edde9fb4ee
+11 -1
View File
@@ -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)
{