diff options
author | Dan Fandrich <dan@coneharvesters.com> | 2007-07-10 22:23:16 +0000 |
---|---|---|
committer | Dan Fandrich <dan@coneharvesters.com> | 2007-07-10 22:23:16 +0000 |
commit | 93bd5123571092b2ccf925ca00cfe107e00f9f68 (patch) | |
tree | d2e41770649c319136584e86c977da41bf781fe3 | |
parent | 04d3a8c7144128de2886443f66c80263713b3d9e (diff) |
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.
-rw-r--r-- | src/main.c | 21 | ||||
-rw-r--r-- | tests/data/Makefile.am | 2 | ||||
-rw-r--r-- | tests/data/test289 | 30 |
3 files changed, 50 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c index 17a961ee0..4f4705059 100644 --- a/src/main.c +++ b/src/main.c @@ -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); diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index f18df11b5..4af0491ca 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -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 diff --git a/tests/data/test289 b/tests/data/test289 new file mode 100644 index 000000000..63184e737 --- /dev/null +++ b/tests/data/test289 @@ -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> |