- Bjorn Augustsson reported a bug which made curl not report any problems even

though it failed to write a very small download to disk (done in a single
  fwrite call). It turned out to be because fwrite() returned success, but
  there was insufficient error-checking for the fclose() call which tricked
  curl to believe things were fine.
This commit is contained in:
Daniel Stenberg 2009-11-23 13:56:45 +00:00
parent b723500af0
commit 1fddcb3f88
3 changed files with 26 additions and 5 deletions

View File

@ -6,6 +6,14 @@
Changelog Changelog
Daniel Stenberg (23 Nov 2009)
- Bjorn Augustsson reported a bug which made curl not report any problems even
though it failed to write a very small download to disk (done in a single
fwrite call). It turned out to be because fwrite() returned success, but
there was insufficient error-checking for the fclose() call which tricked
curl to believe things were fine.
Daniel Stenberg (20 Nov 2009) Daniel Stenberg (20 Nov 2009)
- Constantine Sapuntzakis identified a write after close, as the sockets were - Constantine Sapuntzakis identified a write after close, as the sockets were
closed by libcurl before the SSL lib were shutdown and they may write to its closed by libcurl before the SSL lib were shutdown and they may write to its

View File

@ -25,6 +25,7 @@ This release includes the following bugfixes:
o never-pruned DNS cached entries o never-pruned DNS cached entries
o HTTP proxy tunnel re-used connection even if tunnel got disabled o HTTP proxy tunnel re-used connection even if tunnel got disabled
o SSL lib post-close write o SSL lib post-close write
o curl failed to report write errors for tiny failed downloads
This release includes the following known bugs: This release includes the following known bugs:
@ -35,6 +36,6 @@ advice from friends like these:
Yang Tse, Kamil Dudka, Christian Schmitz, Constantine Sapuntzakis, Yang Tse, Kamil Dudka, Christian Schmitz, Constantine Sapuntzakis,
Marco Maggi, Camille Moncelier, Claes Jakobsson, Kevin Baughman, Marco Maggi, Camille Moncelier, Claes Jakobsson, Kevin Baughman,
Marc Kleine-Budde, Jad Chamcham Marc Kleine-Budde, Jad Chamcham, Bjorn Augustsson
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)

View File

@ -3316,9 +3316,15 @@ static size_t my_fwrite(void *buffer, size_t sz, size_t nmemb, void *stream)
curl_easy_pause(config->easy, CURLPAUSE_CONT); curl_easy_pause(config->easy, CURLPAUSE_CONT);
} }
if(config->nobuffer) if(config->nobuffer) {
/* disable output buffering */ /* disable output buffering */
fflush(out->stream); rc = fflush(out->stream);
if(rc) {
/* return a value that isn't the same as sz * nmemb */
rc = (0 == (sz * nmemb)) ? 1 : 0;
return rc; /* failure */
}
}
return rc; return rc;
} }
@ -5170,8 +5176,14 @@ show_error:
} }
} }
if (outfile && !curlx_strequal(outfile, "-") && outs.stream) if (outfile && !curlx_strequal(outfile, "-") && outs.stream) {
fclose(outs.stream); int rc = fclose(outs.stream);
if(!res && rc) {
/* something went wrong in the writing process */
res = CURLE_WRITE_ERROR;
fprintf(config->errors, "(%s) Failed writing body\n", res);
}
}
#ifdef HAVE_UTIME #ifdef HAVE_UTIME
/* Important that we set the time _after_ the file has been /* Important that we set the time _after_ the file has been