From baf7b803b329e46fe2728fbf62da62c7925546f5 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 13 Nov 2023 15:50:24 +0100 Subject: [PATCH] duphandle: use strdup to clone *COPYPOSTFIELDS if size is not set Previously it would unconditionally use the size, which is set to -1 when strlen is requested. Updated test 544 to verify. Closes #12317 --- lib/easy.c | 11 +++++++---- tests/libtest/lib544.c | 2 -- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/easy.c b/lib/easy.c index 2ec4f5d73f..3341f46614 100644 --- a/lib/easy.c +++ b/lib/easy.c @@ -858,10 +858,13 @@ static CURLcode dupset(struct Curl_easy *dst, struct Curl_easy *src) /* duplicate memory areas pointed to */ i = STRING_COPYPOSTFIELDS; - if(src->set.postfieldsize && src->set.str[i]) { - /* postfieldsize is curl_off_t, Curl_memdup() takes a size_t ... */ - dst->set.str[i] = Curl_memdup(src->set.str[i], - curlx_sotouz(src->set.postfieldsize)); + if(src->set.str[i]) { + if(src->set.postfieldsize == -1) + dst->set.str[i] = strdup(src->set.str[i]); + else + /* postfieldsize is curl_off_t, Curl_memdup() takes a size_t ... */ + dst->set.str[i] = Curl_memdup(src->set.str[i], + curlx_sotouz(src->set.postfieldsize)); if(!dst->set.str[i]) return CURLE_OUT_OF_MEMORY; /* point to the new copy */ diff --git a/tests/libtest/lib544.c b/tests/libtest/lib544.c index 192bfb2e70..a58fa05e3e 100644 --- a/tests/libtest/lib544.c +++ b/tests/libtest/lib544.c @@ -63,7 +63,6 @@ int test(char *URL) /* Update the original data to detect non-copy. */ strcpy(teststring, "FAIL"); -#ifdef LIB545 { CURL *handle2; handle2 = curl_easy_duphandle(curl); @@ -71,7 +70,6 @@ int test(char *URL) curl = handle2; } -#endif /* Now, this is a POST request with binary 0 embedded in POST data. */ res = curl_easy_perform(curl); -- 2.47.3