Fixed bug #53924 (FILTER_VALIDATE_URL doesn't validate port number).

This commit is contained in:
Ilia Alshanetsky 2011-02-04 21:41:15 +00:00
parent 793cfe1376
commit 109b8e99e0
2 changed files with 16 additions and 2 deletions

View File

@ -28,6 +28,7 @@ array(),
'news:news.php.net',
'file://foo/bar',
"http://\r\n/bar",
"http://example.com:qq"
);
foreach ($values as $value) {
var_dump(filter_var($value, FILTER_VALIDATE_URL));
@ -70,6 +71,7 @@ string(17) "news:news.php.net"
string(14) "file://foo/bar"
bool(false)
bool(false)
bool(false)
string(10) "http://qwe"
bool(false)
bool(false)

View File

@ -180,15 +180,20 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
parse_port:
p = e + 1;
pp = p;
while (pp-p < 6 && isdigit(*pp)) {
pp++;
}
if (pp-p < 6 && (*pp == '/' || *pp == '\0')) {
memcpy(port_buf, p, (pp-p));
port_buf[pp-p] = '\0';
ret->port = atoi(port_buf);
if (!ret->port && (pp - p) > 0) {
STR_FREE(ret->scheme);
efree(ret);
return NULL;
}
} else {
goto just_path;
}
@ -267,6 +272,13 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
memcpy(port_buf, p, (e-p));
port_buf[e-p] = '\0';
ret->port = atoi(port_buf);
if (!ret->port && (e - p)) {
STR_FREE(ret->scheme);
STR_FREE(ret->user);
STR_FREE(ret->pass);
efree(ret);
return NULL;
}
}
p--;
}