]> granicus.if.org Git - curl/commitdiff
removed URL size restrictions
authorDaniel Stenberg <daniel@haxx.se>
Mon, 20 Nov 2000 08:53:21 +0000 (08:53 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 20 Nov 2000 08:53:21 +0000 (08:53 +0000)
lib/dict.c
lib/http.c
lib/url.c
lib/urldata.h

index b592266cd5dd9fd2c975e3a47fe5c83bfe68314e..a012dc1cfb0c67bb2c2154429dac8c702bf65f0e 100644 (file)
@@ -233,7 +233,7 @@ CURLcode dict(struct connectdata *conn)
       int i;
        
       ppath++;
-      for (i = 0; (i < URL_MAX_LENGTH) && (ppath[i]); i++) {
+      for (i = 0; ppath[i]; i++) {
         if (ppath[i] == ':')
           ppath[i] = ' ';
       }
index d5241acec719656c70087eec667565c1b6485cee..2ff6432480e170cbc21143b7595435cfec1e44be 100644 (file)
@@ -327,7 +327,7 @@ CURLcode http(struct connectdata *conn)
   }
   if ((data->bits.httpproxy) && !(conn->protocol&PROT_HTTPS))  {
     /* The path sent to the proxy is in fact the entire URL */
-    strncpy(ppath, data->url, URL_MAX_LENGTH-1);
+    ppath = data->url;
   }
   if(data->bits.http_formpost) {
     /* we must build the whole darned post sequence first, so that we have
index 4e9d1bd2cf635cc8fc201d7cce824a5339b9343c..f212bb5d0546ea19ebc7add5fd9c2db842057ccf 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -677,6 +677,9 @@ CURLcode curl_disconnect(CURLconnect *c_connect)
   if(conn->hostent_buf) /* host name info */
     free(conn->hostent_buf);
 
+  if(conn->path) /* the URL path part */
+    free(conn->path);
+
   free(conn); /* free the connection oriented data */
 
   /* clean up the sockets and SSL stuff from the previous "round" */
@@ -696,6 +699,7 @@ static CURLcode _connect(CURL *curl, CURLconnect **in_connect)
 #ifdef HAVE_SIGACTION
   struct sigaction sigact;
 #endif
+  int urllen;
 
   if(!data || (data->handle != STRUCT_OPEN))
     return CURLE_BAD_FUNCTION_ARGUMENT; /* TBD: make error codes */
@@ -734,13 +738,25 @@ static CURLcode _connect(CURL *curl, CURLconnect **in_connect)
 
 #endif
 
+  /* We need to allocate memory to store the path in. We get the size of the
+     full URL to be sure, and we need to make it at least 256 bytes since
+     other parts of the code will rely on this fact */
+#define LEAST_PATH_ALLOC 256
+  urllen=strlen(data->url);
+  if(urllen < LEAST_PATH_ALLOC)
+    urllen=LEAST_PATH_ALLOC;
+  
+  conn->path=(char *)malloc(urllen);
+  if(NULL == conn->path)
+    return CURLE_OUT_OF_MEMORY; /* really bad error */
+
   /* Parse <url> */
   /* We need to parse the url, even when using the proxy, because
    * we will need the hostname and port in case we are trying
    * to SSL connect through the proxy -- and we don't know if we
    * will need to use SSL until we parse the url ...
    */
-  if((2 == sscanf(data->url, "%64[^:]://%" URL_MAX_LENGTH_TXT "[^\n]",
+  if((2 == sscanf(data->url, "%64[^:]://%[^\n]",
                   conn->proto,
                   conn->path)) && strequal(conn->proto, "file")) {
     /* we deal with file://<host>/<path> differently since it
@@ -760,11 +776,11 @@ static CURLcode _connect(CURL *curl, CURLconnect **in_connect)
     strcpy(conn->path, "/");
 
     if (2 > sscanf(data->url,
-                   "%64[^\n:]://%256[^\n/]%" URL_MAX_LENGTH_TXT "[^\n]",
+                   "%64[^\n:]://%256[^\n/]%[^\n]",
                    conn->proto, conn->gname, conn->path)) {
       
       /* badly formatted, let's try the browser-style _without_ 'http://' */
-      if((1 > sscanf(data->url, "%256[^\n/]%" URL_MAX_LENGTH_TXT "[^\n]",
+      if((1 > sscanf(data->url, "%256[^\n/]%[^\n]",
                      conn->gname, conn->path)) ) {
         failf(data, "<url> malformed");
         return CURLE_URL_MALFORMAT;
@@ -1548,6 +1564,8 @@ CURLcode curl_connect(CURL *curl, CURLconnect **in_connect)
        in the connectdata struct, free those here */
     conn = (struct connectdata *)*in_connect;
     if(conn) {
+      if(conn->path)
+        free(conn->path);
       if(conn->hostent_buf)
         free(conn->hostent_buf);
       free(conn);
index bda19f73b68b081477bb088e48669f00b31ac363..de16ea17da70f34c34a2a453a963fc4c1701c8f5 100644 (file)
@@ -175,7 +175,7 @@ struct connectdata {
   char proto[64];
   char gname[256];
   char *name;
-  char path[URL_MAX_LENGTH];
+  char *path; /* formerly staticly this size: URL_MAX_LENGTH */
   char *ppath;
   long bytecount;
   struct timeval now;