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;
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";
?>
bool(false)
bool(false)
string(3) "::1"
+bool(false)
string(9) "127.0.0.1"
Done
--- /dev/null
+--TEST--\r
+Bug #47435 (FILTER_FLAG_NO_PRIV_RANGE and FILTER_FLAG_NO_RES_RANGE don't work with ipv6)\r
+--FILE--\r
+<?php\r
+var_dump(filter_var("FC00::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));\r
+var_dump(filter_var("FC00::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE));\r
+var_dump(filter_var("::", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));\r
+var_dump(filter_var("::", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));\r
+var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));\r
+var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));\r
+var_dump(filter_var("fe8:5:6::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));\r
+var_dump(filter_var("fe8:5:6::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));\r
+var_dump(filter_var("2001:0db8::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));\r
+var_dump(filter_var("2001:0db8::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));\r
+var_dump(filter_var("5f::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));\r
+var_dump(filter_var("5f::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));\r
+var_dump(filter_var("3ff3::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));\r
+var_dump(filter_var("3ff3::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));\r
+?>\r
+--EXPECT-- \r
+string(7) "FC00::1"\r
+bool(false)\r
+string(2) "::"\r
+bool(false)\r
+string(3) "::1"\r
+bool(false)\r
+string(10) "fe8:5:6::1"\r
+bool(false)\r
+string(12) "2001:0db8::1"\r
+bool(false)\r
+string(5) "5f::1"\r
+bool(false)\r
+string(7) "3ff3::1"\r
+bool(false)\r