summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/filter/logical_filters.c6
-rw-r--r--ext/filter/tests/018.phpt2
-rw-r--r--ext/filter/tests/bug53150.phpt28
3 files changed, 35 insertions, 1 deletions
diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c
index 6bf83b9cef..f6a7c82fd2 100644
--- a/ext/filter/logical_filters.c
+++ b/ext/filter/logical_filters.c
@@ -710,8 +710,11 @@ void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
if (flags & FILTER_FLAG_NO_RES_RANGE) {
if (
(ip[0] == 0) ||
+ (ip[0] == 128 && ip[1] == 0) ||
+ (ip[0] == 191 && ip[1] == 255) ||
(ip[0] == 169 && ip[1] == 254) ||
(ip[0] == 192 && ip[1] == 0 && ip[2] == 2) ||
+ (ip[0] == 127 && ip[1] == 0 && ip[2] == 0 && ip[3] == 1) ||
(ip[0] >= 224 && ip[0] <= 255)
) {
RETURN_VALIDATION_FAILED
@@ -732,6 +735,9 @@ 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
+ }
}
break;
}
diff --git a/ext/filter/tests/018.phpt b/ext/filter/tests/018.phpt
index 10840aae74..13122bdc55 100644
--- a/ext/filter/tests/018.phpt
+++ b/ext/filter/tests/018.phpt
@@ -37,7 +37,7 @@ bool(false)
string(9) "127.0.0.1"
bool(false)
string(12) "192.0.34.166"
-string(9) "127.0.0.1"
+bool(false)
string(9) "192.0.0.1"
string(12) "192.0.34.166"
bool(false)
diff --git a/ext/filter/tests/bug53150.phpt b/ext/filter/tests/bug53150.phpt
new file mode 100644
index 0000000000..4baa4db772
--- /dev/null
+++ b/ext/filter/tests/bug53150.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Bug #53150 (FILTER_FLAG_NO_RES_RANGE is missing some IP ranges)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var('127.0.0.1', FILTER_VALIDATE_IP));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP));
+
+var_dump(filter_var('127.0.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var('::1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+
+var_dump(filter_var('128.0.0.1', FILTER_VALIDATE_IP));
+var_dump(filter_var('128.0.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+
+var_dump(filter_var('191.255.0.0', FILTER_VALIDATE_IP));
+var_dump(filter_var('191.255.0.0', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+
+?>
+--EXPECT--
+string(9) "127.0.0.1"
+string(3) "::1"
+bool(false)
+bool(false)
+string(9) "128.0.0.1"
+bool(false)
+string(11) "191.255.0.0"
+bool(false)