I extended a patch from David Shaw to make libcurl _always_ provide an error

string in the given error buffer to address the flaw mention on 21 sep 2005.
This commit is contained in:
Daniel Stenberg 2005-11-17 14:29:54 +00:00
parent 39e366fc11
commit 4022a60ea7
4 changed files with 19 additions and 7 deletions

View File

@ -8,6 +8,10 @@
Daniel (17 November 2005)
- I extended a patch from David Shaw to make libcurl _always_ provide an error
string in the given error buffer to address the flaw mention on 21 sep 2005.
Daniel (16 November 2005)
- Applied Albert Chin's patch that makes the libcurl.pc pkgconfig file get
installed on 'make install' time.

View File

@ -19,6 +19,7 @@ This release includes the following changes:
This release includes the following bugfixes:
o CURLOPT_ERRORBUFFER is now always filled in on errors
o curl outputs error on bad --limit-rate units
o fixed libcurl's use of poll() on cygwin
o the GnuTLS code didn't support client certificates
@ -51,6 +52,6 @@ advice from friends like these:
Dave Dribin, Bradford Bruce, Temprimus, Ofer, Dima Barsky, Amol Pattekar, Jaz
Fresh, tommink[at]post.pl, Gisle Vanem, Nis Jorgensen, Vilmos Nebehaj,
Dmitry Bartsevich, David Lang, Eugene Kotlyarov, Jan Kunder, Yang Tse,
Quagmire, Albert Chin
Quagmire, Albert Chin, David Shaw
Thanks! (and sorry if I forgot to mention someone)

View File

@ -270,12 +270,6 @@ debug/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.
In a few rare cases, there is no text string associated with the error in
libcurl and then you may not get a string in the buffer even though it returns
an error. This is considered a bug and we appreciate your reports about these
cases. Anyway, you can avoid problems with these cases in your program by
making sure to clear the first byte of the error buffer before you call
curl_easy_perform().
.IP CURLOPT_STDERR
Pass a FILE * as parameter. Tell libcurl to use this stream instead of stderr
when showing the progress meter and displaying \fICURLOPT_VERBOSE\fP data.

View File

@ -2217,6 +2217,19 @@ CURLcode Curl_perform(struct SessionHandle *data)
if(newurl)
free(newurl);
if(res && !data->state.errorbuf) {
/*
* As an extra precaution: if no error string has been set and there was
* an error, use the strerror() string or if things are so bad that not
* even that is good, set a bad string that mentions the error code.
*/
char *str = curl_easy_strerror(res);
if(!str)
failf(data, "unspecified error %d", (int)res);
else
failf(data, "%s", str);
}
/* run post-transfer uncondionally, but don't clobber the return code if
we already have an error code recorder */
res2 = Curl_posttransfer(data);