Skip to content

Commit 3587e13

Browse files
tongyifancmb69
authored andcommitted
Fix FILTER_FLAG_NO_RES_RANGE flag
`2001:10::/28` is a reserved IPv6 range. But there's a typo in GH-7476, which caused IPv6 address like `240b:0010::1` will be filtered by the flag `FILTER_FLAG_NO_RES_RANGE`. http://www.faqs.org/rfcs/rfc6890.html Closes GH-7790.
1 parent 6630603 commit 3587e13

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ PHP NEWS
77
. Fixed bug #81585 (cached_chunks are not counted to real_size on shutdown).
88
(cmb)
99

10+
- Filter:
11+
. Fixed FILTER_FLAG_NO_RES_RANGE flag. (Yifan Tong)
12+
1013
- Hash:
1114
. Fixed bug GH-7759 (Incorrect return types for hash() and hash_hmac()).
1215
(cmb)

ext/filter/logical_filters.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -929,7 +929,7 @@ void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
929929
&& ip[4] == 0 && ip[5] == 0 && ip[6] == 0 && (ip[7] == 0 || ip[7] == 1))
930930
|| (ip[0] == 0x5f)
931931
|| (ip[0] >= 0xfe80 && ip[0] <= 0xfebf)
932-
|| ((ip[0] == 0x2001 && ip[1] == 0x0db8) || (ip[1] >= 0x0010 && ip[1] <= 0x001f))
932+
|| (ip[0] == 0x2001 && (ip[1] == 0x0db8 || (ip[1] >= 0x0010 && ip[1] <= 0x001f)))
933933
|| (ip[0] == 0x3ff3)
934934
) {
935935
RETURN_VALIDATION_FAILED

ext/filter/tests/bug47435.phpt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ var_dump(filter_var("fe80:5:6::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
1414
var_dump(filter_var("fe80:5:6::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
1515
var_dump(filter_var("2001:0db8::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
1616
var_dump(filter_var("2001:0db8::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
17+
var_dump(filter_var("2001:0010::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
18+
var_dump(filter_var("2001:0010::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
19+
var_dump(filter_var("240b:0010::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
20+
var_dump(filter_var("240b:0010::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
1721
var_dump(filter_var("5f::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
1822
var_dump(filter_var("5f::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
1923
var_dump(filter_var("3ff3::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
@@ -30,6 +34,10 @@ string(11) "fe80:5:6::1"
3034
bool(false)
3135
string(12) "2001:0db8::1"
3236
bool(false)
37+
string(12) "2001:0010::1"
38+
bool(false)
39+
string(12) "240b:0010::1"
40+
string(12) "240b:0010::1"
3341
string(5) "5f::1"
3442
bool(false)
3543
string(7) "3ff3::1"

0 commit comments

Comments
 (0)