diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/urlapi.c | 32 | 
1 files changed, 16 insertions, 16 deletions
| diff --git a/lib/urlapi.c b/lib/urlapi.c index 5cbda6a98..e68748818 100644 --- a/lib/urlapi.c +++ b/lib/urlapi.c @@ -534,6 +534,14 @@ UNITTEST CURLUcode Curl_parse_port(struct Curl_URL *u, char *hostname)      long port;      char portbuf[7]; +    /* Browser behavior adaptation. If there's a colon with no digits after, +       just cut off the name there which makes us ignore the colon and just +       use the default port. Firefox, Chrome and Safari all do that. */ +    if(!portptr[1]) { +      *portptr = '\0'; +      return CURLUE_OK; +    } +      if(!ISDIGIT(portptr[1]))        return CURLUE_BAD_PORT_NUMBER; @@ -547,22 +555,14 @@ UNITTEST CURLUcode Curl_parse_port(struct Curl_URL *u, char *hostname)      if(rest[0])        return CURLUE_BAD_PORT_NUMBER; -    if(rest != &portptr[1]) { -      *portptr++ = '\0'; /* cut off the name there */ -      *rest = 0; -      /* generate a new to get rid of leading zeroes etc */ -      msnprintf(portbuf, sizeof(portbuf), "%ld", port); -      u->portnum = port; -      u->port = strdup(portbuf); -      if(!u->port) -        return CURLUE_OUT_OF_MEMORY; -    } -    else { -      /* Browser behavior adaptation. If there's a colon with no digits after, -         just cut off the name there which makes us ignore the colon and just -         use the default port. Firefox and Chrome both do that. */ -      *portptr = '\0'; -    } +    *portptr++ = '\0'; /* cut off the name there */ +    *rest = 0; +    /* generate a new port number string to get rid of leading zeroes etc */ +    msnprintf(portbuf, sizeof(portbuf), "%ld", port); +    u->portnum = port; +    u->port = strdup(portbuf); +    if(!u->port) +      return CURLUE_OUT_OF_MEMORY;    }    return CURLUE_OK; | 
