https://github.com/curl/trurl/commit/a4d8ba2aaa237e3db90d350b97209838ee240aa5 From a4d8ba2aaa237e3db90d350b97209838ee240aa5 Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Wed, 14 May 2025 20:24:01 -0700 Subject: [PATCH] trurl: use curl_free() on a pointer coming from curl_maprintf() One instance of a pointer coming from curl_maprintf() was freed with a normal free() which breaks and causes ASAN/valgrind to complain when using a debug-enabled libcurl. Since the function could return a normal heap-allocated pointer or a curl-allocated one, copy the string and curl_free() the original. Closes #393 --- trurl.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/trurl.c b/trurl.c index b5a716ca..f79b1791 100644 --- a/trurl.c +++ b/trurl.c @@ -1381,6 +1381,7 @@ static struct string *memdupzero(char *source, size_t len, bool *modified) int rlen; int leftside; int rightside; + char *temp; /* decode both sides */ leftside = (int)(sep - source); @@ -1420,7 +1421,12 @@ static struct string *memdupzero(char *source, size_t len, bool *modified) goto error; } - encode = curl_maprintf("%s=%s", el ? el : "", er ? er : ""); + temp = curl_maprintf("%s=%s", el ? el : "", er ? er : ""); + if(!temp) + goto error; + /* pointers from curl_maprintf() must be curl_free()d so make a copy */ + encode = strdup(temp); + curl_free(temp); if(!encode) goto error; }