]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
setopt: make setopt_copypostfields a separate function
authorDaniel Stenberg <daniel@haxx.se>
Mon, 23 Feb 2026 12:47:18 +0000 (13:47 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 23 Feb 2026 15:45:37 +0000 (16:45 +0100)
Closes #20688

lib/setopt.c

index 9db5ce33be6eac674c8a54202d1c9d2b98c7acdc..604c9cbc4c5e766f674cfea6e027fef5e4704738 100644 (file)
@@ -128,7 +128,8 @@ CURLcode Curl_setblobopt(struct curl_blob **blobp,
   return CURLE_OK;
 }
 
-static CURLcode setstropt_userpwd(char *option, char **userp, char **passwdp)
+static CURLcode setstropt_userpwd(const char *option, char **userp,
+                                  char **passwdp)
 {
   char *user = NULL;
   char *passwd = NULL;
@@ -1664,7 +1665,7 @@ static CURLcode cookiefile(struct Curl_easy *data, const char *ptr)
 
 #ifndef CURL_DISABLE_PROXY
 static CURLcode setopt_cptr_proxy(struct Curl_easy *data, CURLoption option,
-                                  char *ptr)
+                                  const char *ptr)
 {
   CURLcode result = CURLE_OK;
   struct UserDefined *s = &data->set;
@@ -1832,6 +1833,46 @@ static CURLcode setopt_cptr_proxy(struct Curl_easy *data, CURLoption option,
 }
 #endif
 
+#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MQTT)
+/*
+ * A string with POST data. Makes curl HTTP POST. Even if it is NULL. If
+ * needed, CURLOPT_POSTFIELDSIZE must have been set prior to
+ * CURLOPT_COPYPOSTFIELDS and not altered later.
+ */
+static CURLcode setopt_copypostfields(const char *ptr, struct UserDefined *s)
+{
+  CURLcode result = CURLE_OK;
+  if(!ptr || s->postfieldsize == -1)
+    result = Curl_setstropt(&s->str[STRING_COPYPOSTFIELDS], ptr);
+  else {
+    size_t pflen;
+
+    if(s->postfieldsize < 0)
+      return CURLE_BAD_FUNCTION_ARGUMENT;
+    pflen = curlx_sotouz_range(s->postfieldsize, 0, SIZE_MAX);
+    if(pflen == SIZE_MAX)
+      return CURLE_OUT_OF_MEMORY;
+    else {
+      /* Allocate even when size == 0. This satisfies the need of possible
+         later address compare to detect the COPYPOSTFIELDS mode, and to mark
+         that postfields is used rather than read function or form data.
+      */
+      char *p = curlx_memdup0(ptr, pflen);
+      if(!p)
+        return CURLE_OUT_OF_MEMORY;
+      else {
+        curlx_free(s->str[STRING_COPYPOSTFIELDS]);
+        s->str[STRING_COPYPOSTFIELDS] = p;
+      }
+    }
+  }
+
+  s->postfields = s->str[STRING_COPYPOSTFIELDS];
+  s->method = HTTPREQ_POST;
+  return result;
+}
+#endif
+
 static CURLcode setopt_cptr(struct Curl_easy *data, CURLoption option,
                             char *ptr)
 {
@@ -1901,40 +1942,7 @@ static CURLcode setopt_cptr(struct Curl_easy *data, CURLoption option,
 
 #if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MQTT)
   case CURLOPT_COPYPOSTFIELDS:
-    /*
-     * A string with POST data. Makes curl HTTP POST. Even if it is NULL.
-     * If needed, CURLOPT_POSTFIELDSIZE must have been set prior to
-     * CURLOPT_COPYPOSTFIELDS and not altered later.
-     */
-    if(!ptr || s->postfieldsize == -1)
-      result = Curl_setstropt(&s->str[STRING_COPYPOSTFIELDS], ptr);
-    else {
-      size_t pflen;
-
-      if(s->postfieldsize < 0)
-        return CURLE_BAD_FUNCTION_ARGUMENT;
-      pflen = curlx_sotouz_range(s->postfieldsize, 0, SIZE_MAX);
-      if(pflen == SIZE_MAX)
-        return CURLE_OUT_OF_MEMORY;
-      else {
-        /* Allocate even when size == 0. This satisfies the need of possible
-           later address compare to detect the COPYPOSTFIELDS mode, and to
-           mark that postfields is used rather than read function or form
-           data.
-        */
-        char *p = curlx_memdup0(ptr, pflen);
-        if(!p)
-          return CURLE_OUT_OF_MEMORY;
-        else {
-          curlx_free(s->str[STRING_COPYPOSTFIELDS]);
-          s->str[STRING_COPYPOSTFIELDS] = p;
-        }
-      }
-    }
-
-    s->postfields = s->str[STRING_COPYPOSTFIELDS];
-    s->method = HTTPREQ_POST;
-    break;
+    return setopt_copypostfields(ptr, s);
 
   case CURLOPT_POSTFIELDS:
     /*