mirror of
https://github.com/php/php-src.git
synced 2025-08-18 06:58:55 +02:00
Fixed bug #47435 (FILTER_FLAG_NO_RES_RANGE don't work with ipv6).
This commit is contained in:
parent
82287511ad
commit
fbe4532b48
4 changed files with 72 additions and 2 deletions
2
NEWS
2
NEWS
|
@ -13,6 +13,8 @@
|
|||
- Filter extension:
|
||||
. Fixed bug #53150 (FILTER_FLAG_NO_RES_RANGE is missing some IP ranges).
|
||||
(Ilia)
|
||||
. Fixed bug #47435 (FILTER_FLAG_NO_RES_RANGE don't work with ipv6).
|
||||
(Ilia, valli at icsurselva dot ch)
|
||||
|
||||
- Intl extension:
|
||||
. Fixed bug #53512 (NumberFormatter::setSymbol crash on bogus $attr values).
|
||||
|
|
|
@ -735,8 +735,40 @@ void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
|
|||
RETURN_VALIDATION_FAILED
|
||||
}
|
||||
}
|
||||
if (flags & FILTER_FLAG_NO_RES_RANGE && Z_STRLEN_P(value) == 3 && !strcmp("::1", Z_STRVAL_P(value))) {
|
||||
RETURN_VALIDATION_FAILED
|
||||
if (flags & FILTER_FLAG_NO_RES_RANGE) {
|
||||
switch (Z_STRLEN_P(value)) {
|
||||
case 1: case 0:
|
||||
break;
|
||||
case 2:
|
||||
if (!strcmp("::", Z_STRVAL_P(value))) {
|
||||
RETURN_VALIDATION_FAILED
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (!strcmp("::1", Z_STRVAL_P(value)) || !strcmp("5f:", Z_STRVAL_P(value))) {
|
||||
RETURN_VALIDATION_FAILED
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (Z_STRLEN_P(value) >= 5) {
|
||||
if (
|
||||
!strncasecmp("fe8", Z_STRVAL_P(value), 3) ||
|
||||
!strncasecmp("fe9", Z_STRVAL_P(value), 3) ||
|
||||
!strncasecmp("fea", Z_STRVAL_P(value), 3) ||
|
||||
!strncasecmp("feb", Z_STRVAL_P(value), 3)
|
||||
) {
|
||||
RETURN_VALIDATION_FAILED
|
||||
}
|
||||
}
|
||||
if (
|
||||
(Z_STRLEN_P(value) >= 9 && !strncasecmp("2001:0db8", Z_STRVAL_P(value), 9)) ||
|
||||
(Z_STRLEN_P(value) >= 2 && !strncasecmp("5f", Z_STRVAL_P(value), 2)) ||
|
||||
(Z_STRLEN_P(value) >= 4 && !strncasecmp("3ff3", Z_STRVAL_P(value), 4)) ||
|
||||
(Z_STRLEN_P(value) >= 8 && !strncasecmp("2001:001", Z_STRVAL_P(value), 8))
|
||||
) {
|
||||
RETURN_VALIDATION_FAILED
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -24,6 +24,7 @@ var_dump(filter_var(-1, FILTER_VALIDATE_IP));
|
|||
var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV4));
|
||||
var_dump(filter_var("127.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
|
||||
var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
|
||||
var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
|
||||
var_dump(filter_var("127.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV4));
|
||||
echo "Done\n";
|
||||
?>
|
||||
|
@ -48,5 +49,6 @@ bool(false)
|
|||
bool(false)
|
||||
bool(false)
|
||||
string(3) "::1"
|
||||
bool(false)
|
||||
string(9) "127.0.0.1"
|
||||
Done
|
||||
|
|
34
ext/filter/tests/bug47435.phpt
Normal file
34
ext/filter/tests/bug47435.phpt
Normal file
|
@ -0,0 +1,34 @@
|
|||
--TEST--
|
||||
Bug #47435 (FILTER_FLAG_NO_PRIV_RANGE and FILTER_FLAG_NO_RES_RANGE don't work with ipv6)
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(filter_var("FC00::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
|
||||
var_dump(filter_var("FC00::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE));
|
||||
var_dump(filter_var("::", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
|
||||
var_dump(filter_var("::", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
|
||||
var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
|
||||
var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
|
||||
var_dump(filter_var("fe8:5:6::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
|
||||
var_dump(filter_var("fe8:5:6::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
|
||||
var_dump(filter_var("2001:0db8::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
|
||||
var_dump(filter_var("2001:0db8::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
|
||||
var_dump(filter_var("5f::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
|
||||
var_dump(filter_var("5f::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
|
||||
var_dump(filter_var("3ff3::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
|
||||
var_dump(filter_var("3ff3::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
|
||||
?>
|
||||
--EXPECT--
|
||||
string(7) "FC00::1"
|
||||
bool(false)
|
||||
string(2) "::"
|
||||
bool(false)
|
||||
string(3) "::1"
|
||||
bool(false)
|
||||
string(10) "fe8:5:6::1"
|
||||
bool(false)
|
||||
string(12) "2001:0db8::1"
|
||||
bool(false)
|
||||
string(5) "5f::1"
|
||||
bool(false)
|
||||
string(7) "3ff3::1"
|
||||
bool(false)
|
Loading…
Add table
Add a link
Reference in a new issue