Mercurial > hg > octave-nkf
changeset 17601:9e507e30c9ea
keep a copy of user+password data for older cURL libraries
* url-transfer.cc (curl_transfer::userpwd): New data member.
(curl_transfer::curl_transfer): Initialize it.
(curl_transfer::init): Set it to USER:PASSWORD.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 08 Oct 2013 09:44:51 -0400 |
parents | e89f6dcb37f0 |
children | c0ce72efe5a8 |
files | liboctave/util/url-transfer.cc |
diffstat | 1 files changed, 23 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/util/url-transfer.cc +++ b/liboctave/util/url-transfer.cc @@ -276,7 +276,7 @@ public: curl_transfer (void) - : base_url_transfer (), curl (curl_easy_init ()), errnum () + : base_url_transfer (), curl (curl_easy_init ()), errnum (), userpwd () { if (curl) valid = true; @@ -287,7 +287,7 @@ curl_transfer (const std::string& host, const std::string& user_arg, const std::string& passwd, std::ostream& os) : base_url_transfer (host, user_arg, passwd, os), - curl (curl_easy_init ()), errnum () + curl (curl_easy_init ()), errnum (), userpwd () { if (curl) valid = true; @@ -307,7 +307,8 @@ } curl_transfer (const std::string& url, std::ostream& os) - : base_url_transfer (url, os), curl (curl_easy_init ()), errnum () + : base_url_transfer (url, os), curl (curl_easy_init ()), errnum (), + userpwd () { if (curl) valid = true; @@ -642,9 +643,27 @@ private: + // Pointer to cURL object. CURL *curl; + + // cURL error code. CURLcode errnum; + // The cURL library changed the curl_easy_setopt call to make an + // internal copy of string parameters in version 7.17.0. Prior + // versions only held a pointer to a string provided by the caller + // that must persist for the lifetime of the CURL handle. + // + // The associated API did not change, only the behavior of the library + // implementing the function call. + // + // To be compatible with any version of cURL, the caller must keep a + // copy of all string parameters associated with a CURL handle until + // the handle is released. The curl_handle::curl_handle_rep class + // contains the pointer to the CURL handle and so is the best + // candidate for storing the strings as well. (bug #36717) + std::string userpwd; + // No copying! curl_transfer (const curl_transfer&); @@ -658,7 +677,7 @@ SETOPT (CURLOPT_NOBODY, 1); // Set the username and password - std::string userpwd = user; + userpwd = user; if (! passwd.empty ()) userpwd += ":" + passwd; if (! userpwd.empty ())