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.
This commit is contained in:
Daniel Stenberg 2007-08-22 22:48:41 +00:00
parent d38891c950
commit 91fd2c3bcd
3 changed files with 12 additions and 3 deletions

View File

@ -6,6 +6,11 @@
Changelog 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) Daniel S (22 August 2007)
- Bug report #1779054 (http://curl.haxx.se/bug/view.cgi?id=1779054) pointed - 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 out that libcurl didn't deal with very long (>16K) FTP server response lines

View File

@ -45,6 +45,7 @@ This release includes the following bugfixes:
o FTP NOBODY requests on directories sent "SIZE (null)" o FTP NOBODY requests on directories sent "SIZE (null)"
o FTP NOBODY request on file crash o FTP NOBODY request on file crash
o excessively long FTP server response lines o excessively long FTP server response lines
o file:// upload then FTP:// upload crash
This release includes the following known bugs: This release includes the following known bugs:

View File

@ -96,7 +96,8 @@
*/ */
CURLcode Curl_file_connect(struct connectdata *conn) 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; struct FILEPROTO *file;
int fd; int fd;
#if defined(WIN32) || defined(MSDOS) || defined(__EMX__) #if defined(WIN32) || defined(MSDOS) || defined(__EMX__)
@ -113,9 +114,8 @@ CURLcode Curl_file_connect(struct connectdata *conn)
return CURLE_OUT_OF_MEMORY; return CURLE_OUT_OF_MEMORY;
} }
if (conn->data->reqdata.proto.file) { if (conn->data->reqdata.proto.file)
free(conn->data->reqdata.proto.file); free(conn->data->reqdata.proto.file);
}
conn->data->reqdata.proto.file = file; conn->data->reqdata.proto.file = file;
@ -177,6 +177,9 @@ CURLcode Curl_file_done(struct connectdata *conn,
if(file->fd != -1) if(file->fd != -1)
close(file->fd); close(file->fd);
free(file);
conn->data->reqdata.proto.file= NULL; /* clear it! */
return CURLE_OK; return CURLE_OK;
} }