aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2004-12-16 09:52:36 +0000
committerDaniel Stenberg <daniel@haxx.se>2004-12-16 09:52:36 +0000
commitd3b414724b18e84ed32c044527aac9a85e434690 (patch)
tree336fdd590a0b9a1aa4e246fb85c7219bcdd50312
parent38181fbc7469ea69c8679d45f5968bdac7aea935 (diff)
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.
-rw-r--r--CHANGES5
-rw-r--r--RELEASE-NOTES3
-rw-r--r--lib/http.c3
-rwxr-xr-xtests/runtests.pl9
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, "<log/verifystderr");
- print <ERR>;
+ my @e = <ERR>;
close(ERR);
+ print "RUN: curl command returned $res\n";
+ for(@e) {
+ if($_ !~ /^([ \t]*)$/) {
+ print "RUN: $_";
+ }
+ }
}
open(FILE, "<log/verifiedserver");
my @file=<FILE>;