aboutsummaryrefslogtreecommitdiff
path: root/lib/url.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2000-11-20 08:53:21 +0000
committerDaniel Stenberg <daniel@haxx.se>2000-11-20 08:53:21 +0000
commit42280e95bf159c4db89e3d9ea3d2e77f32cf800f (patch)
tree9bb798409f402e6a01eab36b5de1bdf870431892 /lib/url.c
parentb2ad1f68ccc066799685a86886c7df71b7ea1489 (diff)
removed URL size restrictions
Diffstat (limited to 'lib/url.c')
-rw-r--r--lib/url.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/lib/url.c b/lib/url.c
index 4e9d1bd2c..f212bb5d0 100644
--- 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);