mirror of
https://github.com/curl/curl.git
synced 2025-01-18 14:04:30 +08:00
Fixed some memory leaks in the command-line tool that caused most of the
torture tests to fail.
This commit is contained in:
parent
1cb921b7f3
commit
66f5baa16e
4
CHANGES
4
CHANGES
@ -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
|
||||||
|
51
src/main.c
51
src/main.c
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user