]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tool_getparam: make data_urlencode avoid direct malloc
authorDaniel Stenberg <daniel@haxx.se>
Mon, 8 Jan 2024 16:00:05 +0000 (17:00 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 8 Jan 2024 21:38:22 +0000 (22:38 +0100)
use aprintf() instead

src/tool_getparam.c

index baec05cf947757d3f6ea0c849737fdbd81eb396a..ddc8ff7b33781719576fd0a7432d401ae3c71a79 100644 (file)
@@ -637,25 +637,18 @@ static ParameterError data_urlencode(struct GlobalConfig *global,
     char *enc = curl_easy_escape(NULL, postdata, (int)size);
     Curl_safefree(postdata); /* no matter if it worked or not */
     if(enc) {
-      /* replace (in-place) '%20' by '+' according to RFC1866 */
-      size_t enclen = replace_url_encoded_space_by_plus(enc);
-      /* now make a string with the name from above and append the
-         encoded string */
-      size_t outlen = nlen + enclen + 2;
-      char *n = malloc(outlen);
-      if(!n) {
-        curl_free(enc);
-        return PARAM_NO_MEM;
-      }
+      char *n;
+      replace_url_encoded_space_by_plus(enc);
       if(nlen > 0) { /* only append '=' if we have a name */
-        msnprintf(n, outlen, "%.*s=%s", (int)nlen, nextarg, enc);
-        size = outlen-1;
-      }
-      else {
-        strcpy(n, enc);
-        size = outlen-2; /* since no '=' was inserted */
+        n = aprintf("%.*s=%s", (int)nlen, nextarg, enc);
+        curl_free(enc);
+        if(!n)
+          return PARAM_NO_MEM;
       }
-      curl_free(enc);
+      else
+        n = enc;
+
+      size = strlen(n);
       postdata = n;
     }
     else