]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tool_operate: do not mix memory models
authorDaniel Stenberg <daniel@haxx.se>
Mon, 6 Nov 2023 12:24:43 +0000 (13:24 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 6 Nov 2023 13:29:53 +0000 (14:29 +0100)
Make sure 'inputpath' only points to memory allocated by libcurl so that
curl_free works correctly.

Pointed out by Coverity

Follow-up to 859e88f6533f9e1f890

Closes #12280

src/tool_operate.c

index 649bb91f420fd18a6a59b35b5f5b91777ecdc896..88be9aaad727cd2d20ba6f451d3735f59724121d 100644 (file)
@@ -907,11 +907,8 @@ static CURLcode ipfs_url_rewrite(CURLU *uh, const char *protocol, char **url,
   curl_url_get(gatewaysurl, CURLUPART_PATH, &gatewaypath, CURLU_URLDECODE);
 
   /* get the path from user input */
-  if(curl_url_get(uh, CURLUPART_PATH, &inputpath, CURLU_URLDECODE)) {
-    inputpath = strdup("");
-    if(!inputpath)
-      goto clean;
-  }
+  curl_url_get(uh, CURLUPART_PATH, &inputpath, CURLU_URLDECODE);
+  /* inputpath might be NULL or a valid pointer now */
 
   /* set gateway parts in input url */
   if(curl_url_set(uh, CURLUPART_SCHEME, gatewayscheme, CURLU_URLENCODE)) {
@@ -927,16 +924,14 @@ static CURLcode ipfs_url_rewrite(CURLU *uh, const char *protocol, char **url,
   }
 
   /* if the input path is just a slash, clear it */
-  if(inputpath && *inputpath && strlen(inputpath) == 1) {
-    if(*inputpath == '/') {
-      *inputpath = '\0';
-    }
-  }
+  if(inputpath && (inputpath[0] == '/') && !inputpath[1])
+    *inputpath = '\0';
 
   /* ensure the gateway path ends with a trailing slash */
   ensure_trailing(&gatewaypath, '/');
 
-  pathbuffer = aprintf("%s%s/%s%s", gatewaypath, protocol, cid, inputpath);
+  pathbuffer = aprintf("%s%s/%s%s", gatewaypath, protocol, cid,
+                       inputpath ? inputpath : "");
   if(!pathbuffer) {
     goto clean;
   }