1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

Fixed a curl memory leak reported by Song Ma with a modified version

of the patch he suggested.  Added his test case as test289 to verify.
This commit is contained in:
Dan Fandrich 2007-07-10 22:23:16 +00:00
parent 04d3a8c714
commit 93bd512357
3 changed files with 50 additions and 3 deletions

View File

@ -4009,7 +4009,21 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
helpf("Can't open '%s'!\n", uploadfile);
if(infd)
fclose(infd);
return CURLE_READ_ERROR;
/* Free the list of remaining URLs and globbed upload files
* to force curl to exit immediately
*/
if(urls) {
glob_cleanup(urls);
urls = NULL;
}
if(inglob) {
glob_cleanup(inglob);
inglob = NULL;
}
res = CURLE_READ_ERROR;
goto quit_urls;
}
infdfopen=TRUE;
uploadfilesize=fileinfo.st_size;
@ -4557,6 +4571,7 @@ show_error:
SetComment( outs.filename, url);
#endif
quit_urls:
if(headerfilep)
fclose(headerfilep);
@ -4571,9 +4586,11 @@ show_error:
} /* loop to the next URL */
if(urls)
if(urls) {
/* cleanup memory used for URL globbing patterns */
glob_cleanup(urls);
urls = NULL;
}
if(uploadfile)
free(uploadfile);

View File

@ -42,4 +42,4 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test405 test604 test605 test606 test607 test608 test609 test294 test295 \
test296 test297 test298 test610 test611 test612 test406 test407 test408 \
test409 test613 test614 test700 test701 test702 test704 test705 test703 \
test706 test707 test350 test351 test352 test353
test706 test707 test350 test351 test352 test353 test289

30
tests/data/test289 Normal file
View File

@ -0,0 +1,30 @@
<testcase>
<info>
<keywords>
FTP
STOR
Resume
FAILURE
</keywords>
</info>
# Client-side
<client>
<server>
ftp
</server>
<name>
FTP resume upload but denied access to remote file
</name>
<command>
ftp://%HOSTIP:%FTPPORT/289 -T log/illegal-nonexistent-file -C -
</command>
</client>
# Verify data after the test has been "shot"
<verify>
<errorcode>
26
</errorcode>
</verify>
</testcase>