summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2019-12-12 10:38:14 +0100
committerDaniel Stenberg <daniel@haxx.se>2019-12-12 11:03:55 +0100
commit70a654151515a3cd17b47884154b34a857e81db9 (patch)
tree8933ba58609c471728eb66d162d1bfc600dd2643 /src
parent4940bb85689bbe91df277cce864e2b59b4f5cadb (diff)
downloadcurl-70a654151515a3cd17b47884154b34a857e81db9.tar.gz
curl: fix memory leak in OOM in etags logic
Detected by torture tests Closes #4706
Diffstat (limited to 'src')
-rw-r--r--src/tool_operate.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/tool_operate.c b/src/tool_operate.c
index bbd7fa49d..d4f170e33 100644
--- a/src/tool_operate.c
+++ b/src/tool_operate.c
@@ -926,25 +926,25 @@ static CURLcode single_transfer(struct GlobalConfig *global,
/* open file for reading: */
FILE *file = fopen(config->etag_compare_file, FOPEN_READTEXT);
if(!file) {
- warnf(
- config->global,
- "Failed to open %s\n", config->etag_compare_file);
-
+ errorf(config->global,
+ "Failed to open %s\n", config->etag_compare_file);
result = CURLE_READ_ERROR;
break;
}
if((PARAM_OK == file2string(&etag_from_file, file)) &&
- etag_from_file)
+ etag_from_file) {
header = aprintf("If-None-Match: \"%s\"", etag_from_file);
+ Curl_safefree(etag_from_file);
+ }
else
header = aprintf("If-None-Match: \"\"");
if(!header) {
- warnf(
- config->global,
- "Failed to allocate memory for custom etag header\n");
-
+ if(file)
+ fclose(file);
+ errorf(config->global,
+ "Failed to allocate memory for custom etag header\n");
result = CURLE_OUT_OF_MEMORY;
break;
}
@@ -953,7 +953,6 @@ static CURLcode single_transfer(struct GlobalConfig *global,
add2list(&config->headers, header);
Curl_safefree(header);
- Curl_safefree(etag_from_file);
if(file) {
fclose(file);