]> granicus.if.org Git - curl/commitdiff
DONT TOUCH the data->url as it may point to read-only memory!!!
authorDaniel Stenberg <daniel@haxx.se>
Fri, 23 Mar 2001 08:24:47 +0000 (08:24 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 23 Mar 2001 08:24:47 +0000 (08:24 +0000)
lib/transfer.c

index 54fbab1823ddcffd4bdac60ab91035649e7defc4..9598a0ac5a9a3fbbdc17aac0e95f9fcec8500cc2 100644 (file)
@@ -805,10 +805,17 @@ CURLcode Curl_perform(CURL *curl)
           char *pathsep;
           char *newest;
 
+          /* we must make our own copy of the URL to play with, as it may
+             point to read-only data */
+          char *url_clone=strdup(data->url);
+
+          if(!url_clone)
+            return CURLE_OUT_OF_MEMORY;
+
           /* protsep points to the start of the host name */
-          protsep=strstr(data->url, "//");
+          protsep=strstr(url_clone, "//");
           if(!protsep)
-            protsep=data->url;
+            protsep=url_clone;
           else {
             port=FALSE; /* we got a full URL and thus we should not obey the
                            port number that might have been set by the user
@@ -838,15 +845,16 @@ CURLcode Curl_perform(CURL *curl)
               *pathsep=0;
           }
 
-          newest=(char *)malloc( strlen(data->url) +
+          newest=(char *)malloc( strlen(url_clone) +
                                  1 + /* possible slash */
                                  strlen(conn->newurl) + 1/* zero byte */);
 
           if(!newest)
             return CURLE_OUT_OF_MEMORY;
-          sprintf(newest, "%s%s%s", data->url, ('/' == conn->newurl[0])?"":"/",
+          sprintf(newest, "%s%s%s", url_clone, ('/' == conn->newurl[0])?"":"/",
                   conn->newurl);
           free(conn->newurl);
+          free(url_clone);
           conn->newurl = newest;
         }
         else {