From: Daniel Stenberg Date: Thu, 16 Dec 2004 09:52:36 +0000 (+0000) Subject: Dinar in bug report #1086121, found a file handle leak when a multipart X-Git-Tag: curl-7_12_3~37 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d3b414724b18e84ed32c044527aac9a85e434690;p=thirdparty%2Fcurl.git Dinar in bug report #1086121, found a file handle leak when a multipart formpost (including a file upload part) was aborted before the whole file was sent. --- diff --git a/CHANGES b/CHANGES index c77f06f5fc..4a4d751400 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,11 @@ Changelog +Daniel (16 December 2004) +- Dinar in bug report #1086121, found a file handle leak when a multipart + formpost (including a file upload part) was aborted before the whole file + was sent. + Daniel (15 December 2004) - Tom Lee found out that globbing of strings with backslashes didn't work as you'd expect. Backslashes are such a central part of windows file names that diff --git a/RELEASE-NOTES b/RELEASE-NOTES index c2d53b54f5..f14d333007 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -26,6 +26,7 @@ This release includes the following changes: This release includes the following bugfixes: + o file handle leak in aborted multipart formpost file upload o -T upload multiple files with backslashes in file names o modified credentials between two requests on a persistent http connection o large file file:// resumes on Windows @@ -71,6 +72,6 @@ advice from friends like these: Tim Sneddon, Ian Gulliver, Jean-Philippe Barrette-LaPierre, Jeff Phillips, Wojciech Zwiefka, David Phillips, Reinout van Schouwen, Maurice Barnum, Richard Atterer, Rene Bernhardt, Matt Veenstra, Bryan Henderson, Ton Voon, - Kai Sommerfeld, David Byron, Harshal Pradhan, Tom Lee + Kai Sommerfeld, David Byron, Harshal Pradhan, Tom Lee, Dinar Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/http.c b/lib/http.c index d984eddc1d..79e51b752f 100644 --- a/lib/http.c +++ b/lib/http.c @@ -1299,6 +1299,9 @@ CURLcode Curl_http_done(struct connectdata *conn, conn->bytecount = http->readbytecount + http->writebytecount; Curl_formclean(http->sendit); /* Now free that whole lot */ + if(http->form.fp) + /* a file being uploaded was left opened, close it! */ + fclose(http->form.fp); } else if(HTTPREQ_PUT == data->set.httpreq) conn->bytecount = http->readbytecount + http->writebytecount; diff --git a/tests/runtests.pl b/tests/runtests.pl index 1be984b58a..1e8ff315b6 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -357,10 +357,15 @@ sub runhttpserver { my $data; if($res && $verbose) { - print "RUN: curl command returned $res\nRUN: "; open(ERR, "; + my @e = ; close(ERR); + print "RUN: curl command returned $res\n"; + for(@e) { + if($_ !~ /^([ \t]*)$/) { + print "RUN: $_"; + } + } } open(FILE, ";