]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
add_handle/easy_perform: clear errorbuffer on start if set
authorDaniel Stenberg <daniel@haxx.se>
Mon, 12 Mar 2018 23:51:39 +0000 (00:51 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 17 Mar 2018 11:07:37 +0000 (12:07 +0100)
To offer applications a more defined behavior, we clear the buffer as
early as possible.

Assisted-by: Jay Satiro
Fixes #2190
Closes #2377

docs/libcurl/opts/CURLOPT_ERRORBUFFER.3
lib/easy.c
lib/multi.c

index b64a2a394796a0231bea7061d4267438c9b9fd5f..71cce945bf74b41d9c72c65dfeb694d598518db3 100644 (file)
@@ -28,8 +28,8 @@ CURLOPT_ERRORBUFFER \- set error buffer for error messages
 
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ERRORBUFFER, char *buf);
 .SH DESCRIPTION
-Pass a char * to a buffer that the libcurl may store human readable error
-messages in on failures or problems. This may be more helpful than just the
+Pass a char * to a buffer that libcurl \fBmay\fP store human readable error
+messages on failures or problems. This may be more helpful than just the
 return code from \fIcurl_easy_perform(3)\fP and related functions. The buffer
 \fBmust be at least CURL_ERROR_SIZE bytes big\fP.
 
@@ -38,11 +38,13 @@ it. Failing to do so will cause very odd behavior or even crashes. libcurl
 will need it until you call \fIcurl_easy_cleanup(3)\fP or you set the same
 option again to use a different pointer.
 
+Do not rely on the contents of the buffer unless an error code was returned.
+Since 7.60.0 libcurl will initialize the contents of the error buffer to an
+empty string before performing the transfer. For earlier versions if an error
+code was returned but there was no error detail then the buffer is untouched.
+
 Consider \fICURLOPT_VERBOSE(3)\fP and \fICURLOPT_DEBUGFUNCTION(3)\fP to better
 debug and trace why errors happen.
-
-If the library does not return an error, the buffer may not have been
-touched. Do not rely on the contents in those cases.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
index fa34c3827933aa10926aa12940598c5ac07a1650..c99758617f9dc925ae719b082a53f2fc33fac9a2 100644 (file)
@@ -746,6 +746,10 @@ static CURLcode easy_perform(struct Curl_easy *data, bool events)
   if(!data)
     return CURLE_BAD_FUNCTION_ARGUMENT;
 
+  if(data->set.errorbuffer)
+    /* clear this as early as possible */
+    data->set.errorbuffer[0] = 0;
+
   if(data->multi) {
     failf(data, "easy handle already used in multi handle");
     return CURLE_FAILED_INIT;
index 0a1dba391a2b2df1a7cda7499e879cae2675ba60..822ac3b1e3d6d43ca96b2eb54868ad177df53ba6 100644 (file)
@@ -379,6 +379,8 @@ CURLMcode curl_multi_add_handle(struct Curl_multi *multi,
    * potential multi's connection cache growing which won't be undone in this
    * function no matter what.
    */
+  if(data->set.errorbuffer)
+    data->set.errorbuffer[0] = 0;
 
   /* set the easy handle */
   multistate(data, CURLM_STATE_INIT);