diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-12-12 10:38:14 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-12-12 11:03:55 +0100 |
commit | 70a654151515a3cd17b47884154b34a857e81db9 (patch) | |
tree | 8933ba58609c471728eb66d162d1bfc600dd2643 /src | |
parent | 4940bb85689bbe91df277cce864e2b59b4f5cadb (diff) | |
download | curl-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.c | 19 |
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); |