update filter_var filters for ipv4 addresses to reflect rfc6890 · php/php-src@6fc7817
1+--TEST--
2+Bug #71745 FILTER_FLAG_NO_RES_RANGE does not cover whole 127.0.0.0/8 range
3+--FILE--
4+<?php
5+//https://tools.ietf.org/html/rfc6890#section-2.1
6+7+$privateRanges = array();
8+// 10.0.0.0/8
9+$privateRanges['10.0.0.0/8'] = array('10.0.0.0', '10.255.255.255');
10+11+// 169.254.0.0/16
12+$privateRanges['168.254.0.0/16'] = array('169.254.0.0', '169.254.255.255');
13+14+// 172.16.0.0/12
15+$privateRanges['172.16.0.0/12'] = array('172.16.0.0', '172.31.0.0');
16+17+// 192.168.0.0/16
18+$privateRanges['192.168.0.0/16'] = array('192.168.0.0', '192.168.255.255');
19+20+foreach ($privateRanges as $key => $range) {
21+list($min, $max) = $range;
22+var_dump($key);
23+var_dump(filter_var($min, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE));
24+var_dump(filter_var($max, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE));
25+}
26+27+$reservedRanges = array();
28+29+// 0.0.0.0/8
30+$reserverRanges['0.0.0.0/8'] = array('0.0.0.0', '0.255.255.255');
31+32+// 10.0.0.0/8
33+$reserverdRanges['10.0.0.0/8'] = array('10.0.0.0', '10.255.255.255');
34+35+// 100.64.0.0/10
36+$reserverdRanges['10.64.0.0/10'] = array('100.64.0.0', '100.127.255.255');
37+38+// 127.0.0.0/8
39+$reserverdRanges['127.0.0.0/8'] = array('127.0.0.0', '127.255.255.255');
40+41+// 169.254.0.0/16
42+$reserverdRanges['169.254.0.0/16'] = array('169.254.0.0', '169.254.255.255');
43+44+// 172.16.0.0/12
45+$reserverdRanges['172.16.0.0/12'] = array('172.16.0.0', '172.31.0.0');
46+47+// 192.0.0.0/24
48+$reserverdRanges['192.0.0.0/24'] = array('192.0.0.0', '192.0.0.255');
49+50+// 192.0.0.0/29
51+$reserverdRanges['192.0.0.0/29'] = array('192.0.0.0', '192.0.0.7');
52+53+// 192.0.2.0/24
54+$reserverdRanges['192.0.2.0/24'] = array('192.0.2.0', '192.0.2.255');
55+56+// 198.18.0.0/15
57+$reserverdRanges['198.18.0.0/15'] = array('198.18.0.0', '198.19.255.255');
58+59+// 198.51.100.0/24
60+$reserverdRanges['198.51.100.0/24'] = array('198.51.100.0', '198.51.100.255');
61+62+// 192.88.99.0/24
63+$reserverdRanges['192.88.99.0/24'] = array('192.88.99.0', '192.88.99.255');
64+65+// 192.168.0.0/16
66+$reserverdRanges['192.168.0.0/16'] = array('192.168.0.0', '192.168.255.255');
67+68+// 203.0.113.0/24
69+$reserverdRanges['203.0.113.0/24'] = array('203.0.113.0', '203.0.113.255');
70+71+// 240.0.0.0/4 + 255.255.255.255/32
72+$reserverdRanges['240.0.0.0/4'] = array('224.0.0.0', '255.255.255.255');
73+74+foreach ($reserverdRanges as $key => $range) {
75+list($min, $max) = $range;
76+var_dump($key);
77+var_dump(filter_var($min, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_RES_RANGE));
78+var_dump(filter_var($max, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_RES_RANGE));
79+}
80+81+82+83+--EXPECT--
84+string(10) "10.0.0.0/8"
85+bool(false)
86+bool(false)
87+string(14) "168.254.0.0/16"
88+bool(false)
89+bool(false)
90+string(13) "172.16.0.0/12"
91+bool(false)
92+bool(false)
93+string(14) "192.168.0.0/16"
94+bool(false)
95+bool(false)
96+string(10) "10.0.0.0/8"
97+bool(false)
98+bool(false)
99+string(12) "10.64.0.0/10"
100+bool(false)
101+bool(false)
102+string(11) "127.0.0.0/8"
103+bool(false)
104+bool(false)
105+string(14) "169.254.0.0/16"
106+bool(false)
107+bool(false)
108+string(13) "172.16.0.0/12"
109+bool(false)
110+bool(false)
111+string(12) "192.0.0.0/24"
112+bool(false)
113+bool(false)
114+string(12) "192.0.0.0/29"
115+bool(false)
116+bool(false)
117+string(12) "192.0.2.0/24"
118+bool(false)
119+bool(false)
120+string(13) "198.18.0.0/15"
121+bool(false)
122+bool(false)
123+string(15) "198.51.100.0/24"
124+bool(false)
125+bool(false)
126+string(14) "192.88.99.0/24"
127+bool(false)
128+bool(false)
129+string(14) "192.168.0.0/16"
130+bool(false)
131+bool(false)
132+string(14) "203.0.113.0/24"
133+bool(false)
134+bool(false)
135+string(11) "240.0.0.0/4"
136+bool(false)
137+bool(false)