mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-15 03:48:02 +08:00
curl: Avoid using HTTP/2 with curl 8.7.x due to bug in error codes
curl 8.7.x has a bug in HTTP/2 error codes introduced by commit `0dc036225` (HTTP/2: write response directly, 2024-01-31, `curl-8_7_0~230`) and fixed by commit `5c59f9142` (http2 + ngtcp2: pass CURLcode errors from callbacks, 2024-04-18, `curl-8_8_0~181`). Fixes: #26200
This commit is contained in:
@@ -22,7 +22,7 @@ cmCTestCurl::cmCTestCurl(cmCTest* ctest)
|
||||
cmCurlInitOnce();
|
||||
// In windows, this will init the winsock stuff
|
||||
::curl_global_init(CURL_GLOBAL_ALL);
|
||||
this->Curl = curl_easy_init();
|
||||
this->Curl = cm_curl_easy_init();
|
||||
}
|
||||
|
||||
cmCTestCurl::~cmCTestCurl()
|
||||
|
@@ -177,7 +177,7 @@ bool cmCTestSubmitHandler::SubmitUsingHTTP(
|
||||
cmCTestCurlOpts curlOpts(this->CTest);
|
||||
for (std::string const& file : files) {
|
||||
/* get a curl handle */
|
||||
curl = curl_easy_init();
|
||||
curl = cm_curl_easy_init();
|
||||
if (curl) {
|
||||
cmCurlSetCAInfo(curl);
|
||||
if (curlOpts.TLSVersionOpt) {
|
||||
|
@@ -226,3 +226,15 @@ std::string cmCurlFixFileURL(std::string url)
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
::CURL* cm_curl_easy_init()
|
||||
{
|
||||
::CURL* curl = curl_easy_init();
|
||||
if (curl_version_info_data* cv = curl_version_info(CURLVERSION_FIRST)) {
|
||||
// curl 8.7.x returns incorrect HTTP/2 error codes.
|
||||
if (cv->version_num >= 0x080700 && cv->version_num < 0x080800) {
|
||||
curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
|
||||
}
|
||||
}
|
||||
return curl;
|
||||
}
|
||||
|
@@ -18,3 +18,5 @@ std::string cmCurlSetCAInfo(::CURL* curl, const std::string& cafile = {});
|
||||
std::string cmCurlSetNETRCOption(::CURL* curl, const std::string& netrc_level,
|
||||
const std::string& netrc_file);
|
||||
std::string cmCurlFixFileURL(std::string url);
|
||||
|
||||
::CURL* cm_curl_easy_init();
|
||||
|
@@ -2117,7 +2117,7 @@ bool HandleDownloadCommand(std::vector<std::string> const& args,
|
||||
::CURL* curl;
|
||||
cmCurlInitOnce();
|
||||
::curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
curl = ::curl_easy_init();
|
||||
curl = cm_curl_easy_init();
|
||||
if (!curl) {
|
||||
status.SetError("DOWNLOAD error initializing curl.");
|
||||
return false;
|
||||
@@ -2491,7 +2491,7 @@ bool HandleUploadCommand(std::vector<std::string> const& args,
|
||||
::CURL* curl;
|
||||
cmCurlInitOnce();
|
||||
::curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
curl = ::curl_easy_init();
|
||||
curl = cm_curl_easy_init();
|
||||
if (!curl) {
|
||||
status.SetError("UPLOAD error initializing curl.");
|
||||
fclose(fin);
|
||||
|
Reference in New Issue
Block a user