From b98afa6e9ac0832b22186d5cda536c90b328abfa Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 9 Jan 2026 12:49:13 +0100 Subject: [PATCH] Fix resetting some curl options at runtime --- src/httpfetch.cpp | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index 4160a8a257..cee3da51eb 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -219,19 +219,18 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_, return; // Set static cURL options - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); - curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3); + curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, CURLFOLLOW_ALL); + curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3L); curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, ""); // = all supported ones std::string bind_address = g_settings->get("bind_address"); - if (!bind_address.empty()) { - curl_easy_setopt(curl, CURLOPT_INTERFACE, bind_address.c_str()); - } + curl_easy_setopt(curl, CURLOPT_INTERFACE, + bind_address.empty() ? nullptr : bind_address.c_str()); - if (!g_settings->getBool("enable_ipv6")) { - curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); - } + bool enable_ipv6 = g_settings->getBool("enable_ipv6"); + curl_easy_setopt(curl, CURLOPT_IPRESOLVE, + enable_ipv6 ? CURL_IPRESOLVE_WHATEVER : CURL_IPRESOLVE_V4); // Restrict protocols so that curl vulnerabilities in // other protocols don't affect us. @@ -259,8 +258,8 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_, curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, request.connect_timeout); - if (!request.useragent.empty()) - curl_easy_setopt(curl, CURLOPT_USERAGENT, request.useragent.c_str()); + curl_easy_setopt(curl, CURLOPT_USERAGENT, + request.useragent.empty() ? nullptr : request.useragent.c_str()); // Set up a write callback that writes to the // result struct, unless the data is to be discarded @@ -279,14 +278,14 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_, default: assert(false); case HTTP_GET: - curl_easy_setopt(curl, CURLOPT_HTTPGET, 1); + curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); break; case HTTP_HEAD: // This is kinda pointless right now, since we don't return response headers (TODO?) - curl_easy_setopt(curl, CURLOPT_NOBODY, 1); + curl_easy_setopt(curl, CURLOPT_NOBODY, 1L); break; case HTTP_POST: - curl_easy_setopt(curl, CURLOPT_POST, 1); + curl_easy_setopt(curl, CURLOPT_POST, 1L); break; case HTTP_PUT: curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT"); @@ -338,9 +337,8 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_, } curl_easy_setopt(curl, CURLOPT_HTTPHEADER, http_header); - if (!g_settings->getBool("curl_verify_cert")) { - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); - } + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, + g_settings->getBool("curl_verify_cert") ? 1L : 0L); } CURLcode HTTPFetchOngoing::start(CURLM *multi_) @@ -414,7 +412,6 @@ HTTPFetchOngoing::~HTTPFetchOngoing() // Set safe options for the reusable cURL handle curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, httpfetch_discardfunction); - curl_easy_setopt(curl, CURLOPT_USERAGENT, nullptr); curl_easy_setopt(curl, CURLOPT_WRITEDATA, nullptr); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, nullptr); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, nullptr);