aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2007-08-22 22:48:41 +0000
committerDaniel Stenberg <daniel@haxx.se>2007-08-22 22:48:41 +0000
commit91fd2c3bcdc9f0d336c6d7404279db03ea4eaca9 (patch)
tree10350efdf90731b134d9ce7caf15bbff90f0900f
parentd38891c9500216c5c69d1d0aa7c725f1de449ddf (diff)
Bug report #1779751 (http://curl.haxx.se/bug/view.cgi?id=1779751) pointed
out that doing first a file:// upload and then an FTP upload crashed libcurl or at best caused furious valgrind complaints. Fixed now by making sure we free and clear the file-specific struct properly when done with it.
-rw-r--r--CHANGES5
-rw-r--r--RELEASE-NOTES1
-rw-r--r--lib/file.c9
3 files changed, 12 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 73b73f0fc..bb963d70c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,11 @@
Changelog
+Daniel S (23 August 2007)
+- Bug report #1779751 (http://curl.haxx.se/bug/view.cgi?id=1779751) pointed
+ out that doing first a file:// upload and then an FTP upload crashed libcurl
+ or at best caused furious valgrind complaints. Fixed now!
+
Daniel S (22 August 2007)
- Bug report #1779054 (http://curl.haxx.se/bug/view.cgi?id=1779054) pointed
out that libcurl didn't deal with very long (>16K) FTP server response lines
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index a5e660e49..dd61e24c7 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -45,6 +45,7 @@ This release includes the following bugfixes:
o FTP NOBODY requests on directories sent "SIZE (null)"
o FTP NOBODY request on file crash
o excessively long FTP server response lines
+ o file:// upload then FTP:// upload crash
This release includes the following known bugs:
diff --git a/lib/file.c b/lib/file.c
index 8562cc21b..1abc838ea 100644
--- a/lib/file.c
+++ b/lib/file.c
@@ -96,7 +96,8 @@
*/
CURLcode Curl_file_connect(struct connectdata *conn)
{
- char *real_path = curl_easy_unescape(conn->data, conn->data->reqdata.path, 0, NULL);
+ char *real_path = curl_easy_unescape(conn->data, conn->data->reqdata.path, 0,
+ NULL);
struct FILEPROTO *file;
int fd;
#if defined(WIN32) || defined(MSDOS) || defined(__EMX__)
@@ -113,9 +114,8 @@ CURLcode Curl_file_connect(struct connectdata *conn)
return CURLE_OUT_OF_MEMORY;
}
- if (conn->data->reqdata.proto.file) {
+ if (conn->data->reqdata.proto.file)
free(conn->data->reqdata.proto.file);
- }
conn->data->reqdata.proto.file = file;
@@ -177,6 +177,9 @@ CURLcode Curl_file_done(struct connectdata *conn,
if(file->fd != -1)
close(file->fd);
+ free(file);
+ conn->data->reqdata.proto.file= NULL; /* clear it! */
+
return CURLE_OK;
}