From: Viktor Szakats Date: Mon, 15 Jun 2026 09:47:05 +0000 (+0200) Subject: curl_formdata: fix to pass long where missing, document `CURLFORM_NAMELENGTH` X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=adb606eae752eaeea9a5fcea77fc46498e2ecf05;p=thirdparty%2Fcurl.git curl_formdata: fix to pass long where missing, document `CURLFORM_NAMELENGTH` - lib650: pass `long` to `CURLFORM_NAMELENGTH` in test. Spotted by Copilot. https://github.com/curl/curl/pull/22011#discussion_r3412407235 Follow-up to 3620e569b312476f1e63b298106f942079b5afe8 - lib650: drop an interim variable, and interim casts. Follow-up to 60776a0515c2a8f572902ad5bcc9f63eeaeafa84 #2747 - curl_formdata.md: document `CURLFORM_NAMELENGTH` on man page. - curl_formdata.md: pass `long` to `CURLFORM_BUFFERLENGTH` on man page. - formdata: pass `long` to `CURLFORM_CONTENTSLENGTH` in comment. Closes #22017 --- diff --git a/docs/libcurl/curl_formadd.md b/docs/libcurl/curl_formadd.md index 94e6c269bd..f988e03876 100644 --- a/docs/libcurl/curl_formadd.md +++ b/docs/libcurl/curl_formadd.md @@ -112,6 +112,12 @@ If you pass a 0 (zero) for this option, libcurl calls strlen() on the contents to figure out the size. If you really want to send a zero byte content then you must make sure strlen() on the data pointer returns zero. +## CURLFORM_NAMELENGTH + +followed by a long giving the length of the name. Pass this option to set +the length of *CURLFORM_COPYNAME* and *CURLFORM_PTRNAME* strings, if they are +not null-terminated. + ## CURLFORM_FILECONTENT followed by a filename, causes that file to be read and its contents used @@ -278,7 +284,7 @@ int main(void) CURLFORM_COPYNAME, "name", CURLFORM_BUFFER, "data", CURLFORM_BUFFERPTR, record, - CURLFORM_BUFFERLENGTH, sizeof(record), + CURLFORM_BUFFERLENGTH, (long)sizeof(record), CURLFORM_END); /* no option needed for the end marker */ diff --git a/lib/formdata.c b/lib/formdata.c index ccfe1aa09d..681902db71 100644 --- a/lib/formdata.c +++ b/lib/formdata.c @@ -184,7 +184,7 @@ static void free_formlist(struct FormInfo *ptr) * * name/value pair where only the content pointer is remembered: * curl_formadd(&post, &last, CURLFORM_COPYNAME, "name", - * CURLFORM_PTRCONTENTS, ptr, CURLFORM_CONTENTSLENGTH, 10, + * CURLFORM_PTRCONTENTS, ptr, CURLFORM_CONTENTSLENGTH, 10L, * CURLFORM_END); * (if CURLFORM_CONTENTSLENGTH is missing strlen () is used) * diff --git a/tests/libtest/lib650.c b/tests/libtest/lib650.c index 331dc89964..b207c4a461 100644 --- a/tests/libtest/lib650.c +++ b/tests/libtest/lib650.c @@ -48,7 +48,6 @@ static CURLcode test_lib650(const char *URL) struct curl_forms formarray[3]; size_t formlength = 0; char flbuf[32]; - long contentlength = 0; static const char testname[] = "fieldname"; static char testdata[] = "this is what we post to the silly web server"; @@ -83,19 +82,17 @@ static CURLcode test_lib650(const char *URL) goto test_cleanup; } - contentlength = (long)(strlen(testdata) - 1); - /* Use a form array for the non-copy test. */ formarray[0].option = CURLFORM_PTRCONTENTS; formarray[0].value = testdata; formarray[1].option = CURLFORM_CONTENTSLENGTH; - formarray[1].value = (char *)(size_t)contentlength; + formarray[1].value = (char *)(strlen(testdata) - 1); formarray[2].option = CURLFORM_END; formarray[2].value = NULL; formrc = curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, testname, - CURLFORM_NAMELENGTH, sizeof(testname) - 2, + CURLFORM_NAMELENGTH, (long)(sizeof(testname) - 2), CURLFORM_ARRAY, formarray, CURLFORM_FILENAME, "remotefile.txt", CURLFORM_END);