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)