desktop/source/app/updater.cxx | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-)
New commits: commit 11b7821b547fecadee5d59432483b170a42c25fb Author: Stephan Bergmann <sberg...@redhat.com> AuthorDate: Fri Oct 23 10:38:10 2020 +0200 Commit: Stephan Bergmann <sberg...@redhat.com> CommitDate: Fri Oct 23 17:05:16 2020 +0200 Missing call to curl_easy_cleanup (--enable-online-update=mar) <https://curl.haxx.se/libcurl/c/curl_easy_init.html> states that each call to curl_easy_init "MUST have a corresponding call to curl_easy_cleanup". (And <https://curl.haxx.se/libcurl/c/curl_easy_cleanup.html> states: "Passing in a NULL pointer in handle will make this function return immediately with no action.") The call to curl_easy_cleanup appears to be missing ever since the code calling curl_easy_init was introduced with 9c3b05f2d571b58ee2322a942162ecec654544dc "improve update checker and update downloader code". Change-Id: I5757efe131f73783c6f66a77d07676b8ce440f9d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104711 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sberg...@redhat.com> diff --git a/desktop/source/app/updater.cxx b/desktop/source/app/updater.cxx index 2d99856b2174..2748373e5f62 100644 --- a/desktop/source/app/updater.cxx +++ b/desktop/source/app/updater.cxx @@ -43,6 +43,8 @@ #include <officecfg/Setup.hxx> +#include <functional> +#include <memory> #include <set> namespace { @@ -538,13 +540,14 @@ size_t WriteCallbackFile(void *ptr, size_t size, std::string download_content(const OString& rURL, bool bFile, OUString& rHash) { Updater::log("Download: " + rURL); - CURL* curl = curl_easy_init(); + std::unique_ptr<CURL, std::function<void(CURL *)>> curl( + curl_easy_init(), [](CURL * p) { curl_easy_cleanup(p); }); if (!curl) return std::string(); - curl_easy_setopt(curl, CURLOPT_URL, rURL.getStr()); - curl_easy_setopt(curl, CURLOPT_USERAGENT, kUserAgent); + curl_easy_setopt(curl.get(), CURLOPT_URL, rURL.getStr()); + curl_easy_setopt(curl.get(), CURLOPT_USERAGENT, kUserAgent); bool bUseProxy = false; if (bUseProxy) { @@ -557,18 +560,18 @@ std::string download_content(const OString& rURL, bool bFile, OUString& rHash) char buf[] = "Expect:"; curl_slist* headerlist = nullptr; headerlist = curl_slist_append(headerlist, buf); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); // follow redirects + curl_easy_setopt(curl.get(), CURLOPT_HTTPHEADER, headerlist); + curl_easy_setopt(curl.get(), CURLOPT_FOLLOWLOCATION, 1); // follow redirects // only allow redirect to http:// and https:// - curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); + curl_easy_setopt(curl.get(), CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); std::string response_body; utl::TempFile aTempFile; WriteDataFile aFile(aTempFile.GetStream(StreamMode::WRITE)); if (!bFile) { - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, + curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION, WriteCallback); + curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, static_cast<void *>(&response_body)); aTempFile.EnableKillingFile(true); @@ -581,17 +584,17 @@ std::string download_content(const OString& rURL, bool bFile, OUString& rHash) aTempFile.EnableKillingFile(false); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallbackFile); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, + curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION, WriteCallbackFile); + curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, static_cast<void *>(&aFile)); } // Fail if 400+ is returned from the web server. - curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1); + curl_easy_setopt(curl.get(), CURLOPT_FAILONERROR, 1); - CURLcode cc = curl_easy_perform(curl); + CURLcode cc = curl_easy_perform(curl.get()); long http_code = 0; - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); + curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &http_code); if (http_code != 200) { SAL_WARN("desktop.updater", "download did not succeed. Error code: " << http_code); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits