From d3b414724b18e84ed32c044527aac9a85e434690 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 16 Dec 2004 09:52:36 +0000 Subject: 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. --- CHANGES | 5 +++++ RELEASE-NOTES | 3 ++- lib/http.c | 3 +++ tests/runtests.pl | 9 +++++++-- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index c77f06f5f..4a4d75140 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 c2d53b54f..f14d33300 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 d984eddc1..79e51b752 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 1be984b58..1e8ff315b 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, "; -- cgit v1.2.3