From: Daniel Stenberg Date: Sun, 22 Mar 2026 12:08:43 +0000 (+0100) Subject: tool_operate: fix memory-leak on failed uploads X-Git-Tag: curl-8_20_0~346 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9820e5dface5739accda14e656d89a7f84642c61;p=thirdparty%2Fcurl.git tool_operate: fix memory-leak on failed uploads Add test case 1673 to do repeated upload failures and verify there is no leak. This proved a previous leak and now it verifies the fix. Reported-by: James Fuller Closes #21062 --- diff --git a/src/tool_operate.c b/src/tool_operate.c index 81a58ab230..c006ddfa83 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -235,6 +235,10 @@ static struct per_transfer *del_per_transfer(struct per_transfer *per) else transfersl = p; + curlx_free(per->uploadfile); + curlx_free(per->outfile); + curlx_free(per->url); + curl_easy_cleanup(per->curl); curlx_free(per); return n; @@ -777,12 +781,8 @@ static CURLcode post_per_transfer(struct per_transfer *per, if(per->etag_save.alloc_filename) tool_safefree(per->etag_save.filename); - curl_easy_cleanup(per->curl); if(outs->alloc_filename) curlx_free(outs->filename); - curlx_free(per->url); - curlx_free(per->outfile); - curlx_free(per->uploadfile); curl_slist_free_all(per->hdrcbdata.headlist); per->hdrcbdata.headlist = NULL; return result; diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 19087ba2d1..0054e2069b 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -224,7 +224,7 @@ test1650 test1651 test1652 test1653 test1654 test1655 test1656 test1657 \ test1658 test1659 test1660 test1661 test1662 test1663 test1664 test1665 \ test1666 test1667 test1668 \ \ -test1670 test1671 test1672 \ +test1670 test1671 test1672 test1673 \ \ test1680 test1681 test1682 test1683 test1684 \ \ diff --git a/tests/data/test1673 b/tests/data/test1673 new file mode 100644 index 0000000000..46b26e1ef5 --- /dev/null +++ b/tests/data/test1673 @@ -0,0 +1,25 @@ + + + + +HTTP +upload +--retry + + + + + +HTTP retry upload with missing upload file + + +http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER --retry 5 --retry-all-errors --upload-file AAAAAAAAAAA + + + + + +26 + + +