From 9820e5dface5739accda14e656d89a7f84642c61 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sun, 22 Mar 2026 13:08:43 +0100 Subject: [PATCH] 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 --- src/tool_operate.c | 8 ++++---- tests/data/Makefile.am | 2 +- tests/data/test1673 | 25 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 tests/data/test1673 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 + + +