Fixed some memory leaks in the command-line tool that caused most of the

torture tests to fail.
This commit is contained in:
Dan Fandrich 2009-08-09 23:15:20 +00:00
parent 1cb921b7f3
commit 66f5baa16e
2 changed files with 47 additions and 8 deletions

View File

@ -6,6 +6,10 @@
Changelog Changelog
Daniel Fandrich (9 Aug 2009)
- Fixed some memory leaks in the command-line tool that caused most of the
torture tests to fail.
Daniel Stenberg (2 Aug 2009) Daniel Stenberg (2 Aug 2009)
- Curt Bogmine reported a problem with SNI enabled on a particular server. We - Curt Bogmine reported a problem with SNI enabled on a particular server. We
should introduce an option to disable SNI, but as we're in feature freeze should introduce an option to disable SNI, but as we're in feature freeze

View File

@ -4378,8 +4378,11 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
file output call */ file output call */
if(config->create_dirs && if(config->create_dirs &&
(-1 == create_dir_hierarchy(outfile, config->errors))) (-1 == create_dir_hierarchy(outfile, config->errors))) {
return CURLE_WRITE_ERROR; free(url);
res = CURLE_WRITE_ERROR;
break;
}
if(config->resume_from_current) { if(config->resume_from_current) {
/* We're told to continue from where we are now. Get the /* We're told to continue from where we are now. Get the
@ -4404,7 +4407,9 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
outs.stream=(FILE *) fopen(outfile, config->resume_from?"ab":"wb"); outs.stream=(FILE *) fopen(outfile, config->resume_from?"ab":"wb");
if (!outs.stream) { if (!outs.stream) {
helpf(config->errors, "Can't open '%s'!\n", outfile); helpf(config->errors, "Can't open '%s'!\n", outfile);
return CURLE_WRITE_ERROR; free(url);
res = CURLE_WRITE_ERROR;
break;
} }
} }
else { else {
@ -4449,13 +4454,15 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
char *urlbuffer = malloc(strlen(url) + strlen(filep) + 3); char *urlbuffer = malloc(strlen(url) + strlen(filep) + 3);
if(!urlbuffer) { if(!urlbuffer) {
helpf(config->errors, "out of memory\n"); helpf(config->errors, "out of memory\n");
return CURLE_OUT_OF_MEMORY; free(url);
res = CURLE_OUT_OF_MEMORY;
break;
} }
if(ptr) if(ptr)
/* there is a trailing slash on the URL */ /* there is a trailing slash on the URL */
sprintf(urlbuffer, "%s%s", url, filep); sprintf(urlbuffer, "%s%s", url, filep);
else else
/* thers is no trailing slash on the URL */ /* there is no trailing slash on the URL */
sprintf(urlbuffer, "%s/%s", url, filep); sprintf(urlbuffer, "%s/%s", url, filep);
curl_free(filep); curl_free(filep);
@ -4552,7 +4559,21 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
urlbuffer = malloc(strlen(url) + strlen(httpgetfields) + 3); urlbuffer = malloc(strlen(url) + strlen(httpgetfields) + 3);
if(!urlbuffer) { if(!urlbuffer) {
helpf(config->errors, "out of memory\n"); helpf(config->errors, "out of memory\n");
return CURLE_OUT_OF_MEMORY;
/* 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_OUT_OF_MEMORY;
goto quit_urls;
} }
if (pc) if (pc)
sprintf(urlbuffer, "%s%c%s", url, sep, httpgetfields); sprintf(urlbuffer, "%s%c%s", url, sep, httpgetfields);
@ -4704,8 +4725,22 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
my_setopt_str(curl, CURLOPT_SSH_KNOWNHOSTS, file); my_setopt_str(curl, CURLOPT_SSH_KNOWNHOSTS, file);
curl_free(file); curl_free(file);
} }
else else {
return CURLE_OUT_OF_MEMORY; /* 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_OUT_OF_MEMORY;
goto quit_urls;
}
} }
if(config->no_body || config->remote_time) { if(config->no_body || config->remote_time) {