Commit 4022a60e authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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.
parent 39e366fc
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -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)
Daniel (16 November 2005)
- Applied Albert Chin's patch that makes the libcurl.pc pkgconfig file get
- Applied Albert Chin's patch that makes the libcurl.pc pkgconfig file get
  installed on 'make install' time.
  installed on 'make install' time.
+2 −1
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ This release includes the following changes:


This release includes the following bugfixes:
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 curl outputs error on bad --limit-rate units
 o fixed libcurl's use of poll() on cygwin
 o fixed libcurl's use of poll() on cygwin
 o the GnuTLS code didn't support client certificates
 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
 Dave Dribin, Bradford Bruce, Temprimus, Ofer, Dima Barsky, Amol Pattekar, Jaz
 Fresh, tommink[at]post.pl, Gisle Vanem, Nis Jorgensen, Vilmos Nebehaj,
 Fresh, tommink[at]post.pl, Gisle Vanem, Nis Jorgensen, Vilmos Nebehaj,
 Dmitry Bartsevich, David Lang, Eugene Kotlyarov, Jan Kunder, Yang Tse,
 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)
        Thanks! (and sorry if I forgot to mention someone)
+0 −6
Original line number Original line Diff line number Diff line
@@ -270,12 +270,6 @@ debug/trace why errors happen.
If the library does not return an error, the buffer may not have been
If the library does not return an error, the buffer may not have been
touched. Do not rely on the contents in those cases.
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
.IP CURLOPT_STDERR
Pass a FILE * as parameter. Tell libcurl to use this stream instead of 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.
when showing the progress meter and displaying \fICURLOPT_VERBOSE\fP data.
+13 −0
Original line number Original line Diff line number Diff line
@@ -2217,6 +2217,19 @@ CURLcode Curl_perform(struct SessionHandle *data)
  if(newurl)
  if(newurl)
    free(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
  /* run post-transfer uncondionally, but don't clobber the return code if
     we already have an error code recorder */
     we already have an error code recorder */
  res2 = Curl_posttransfer(data);
  res2 = Curl_posttransfer(data);