]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tool_operate: fix memory-leak on failed uploads
authorDaniel Stenberg <daniel@haxx.se>
Sun, 22 Mar 2026 12:08:43 +0000 (13:08 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 22 Mar 2026 22:58:02 +0000 (23:58 +0100)
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
tests/data/Makefile.am
tests/data/test1673 [new file with mode: 0644]

index 81a58ab2304850aea64fe903e7ac0c8f249bbe61..c006ddfa831315a48c4b698c7dae51807bb303cd 100644 (file)
@@ -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;
index 19087ba2d10d7134fa2547272e24d0a71f9ed6c3..0054e2069b1f77f1bcb1efb3e12304798292be2a 100644 (file)
@@ -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 (file)
index 0000000..46b26e1
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<testcase>
+<info>
+<keywords>
+HTTP
+upload
+--retry
+</keywords>
+</info>
+
+<client>
+<name>
+HTTP retry upload with missing upload file
+</name>
+<command>
+http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER --retry 5 --retry-all-errors --upload-file AAAAAAAAAAA
+</command>
+</client>
+
+<verify>
+<errorcode>
+26
+</errorcode>
+</verify>
+</testcase>