mirror of
https://github.com/curl/curl.git
synced 2026-08-02 15:40:32 +03:00
urlapi: Fix port parsing of eol colon
A URL with a single colon without a portnumber should use the default port, discarding the colon. Fix, add a testcase and also do little bit of comment wordsmithing. Closes #3365 Reviewed-by: Daniel Stenberg <daniel@haxx.se>
This commit is contained in:
parent
4258dc02d8
commit
d8607da1a6
2 changed files with 24 additions and 16 deletions
32
lib/urlapi.c
32
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue