]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
MiniCurl: Make it safe to reuse a MiniCurl object 12292/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 21 Dec 2022 13:50:31 +0000 (14:50 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 22 Dec 2022 08:27:38 +0000 (09:27 +0100)
pdns/minicurl.cc
pdns/minicurl.hh

index 65b7f71b36a9b5403d7f1ac5228f7c85aa7750ac..2a39e6aca857db6892ce11546618b5bbac91c029 100644 (file)
@@ -118,6 +118,15 @@ static string extractHostFromURL(const std::string& url)
 
 void MiniCurl::setupURL(const std::string& str, const ComboAddress* rem, const ComboAddress* src, int timeout, size_t byteslimit, bool fastopen, bool verify)
 {
+  if (!d_fresh) {
+    curl_easy_reset(getCURLPtr(d_curl));
+  }
+  else {
+    d_fresh = false;
+  }
+
+  clearHostsList();
+
   if (rem) {
     struct curl_slist *hostlist = nullptr; // THIS SHOULD BE FREED
 
index 28e426a8104a19101b1d351bcd5ceaaaeed73ab6..08c88a6d75a22e5a07140344b71918b54ebcea44 100644 (file)
@@ -69,6 +69,7 @@ private:
 #endif
   std::string d_data;
   size_t d_byteslimit{};
+  bool d_fresh{true};
 
   void setupURL(const std::string& str, const ComboAddress* rem, const ComboAddress* src, int timeout, size_t byteslimit, bool fastopen, bool verify);
   void setHeaders(const MiniCurlHeaders& headers);