summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2020-10-23 10:38:10 +0200
committerStephan Bergmann <sbergman@redhat.com>2020-10-23 17:05:16 +0200
commit11b7821b547fecadee5d59432483b170a42c25fb (patch)
tree996718e4cb0bd4329679d2fdfff4ff407efcaa9f /desktop
parent40bff2567fa4a3fa8ec4445182cbbe3547c17410 (diff)
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 <sbergman@redhat.com>
Diffstat (limited to 'desktop')
-rw-r--r--desktop/source/app/updater.cxx29
1 files changed, 16 insertions, 13 deletions
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);