[core] allow ip_in_range to match exact IPs
This commit is contained in:
parent
c5395df243
commit
e49fcfa0c7
2 changed files with 14 additions and 1 deletions
|
@ -36,7 +36,11 @@ function array_iunique(array $array): array
|
||||||
*/
|
*/
|
||||||
function ip_in_range(string $IP, string $CIDR): bool
|
function ip_in_range(string $IP, string $CIDR): bool
|
||||||
{
|
{
|
||||||
list($net, $mask) = explode("/", $CIDR);
|
$parts = explode("/", $CIDR);
|
||||||
|
if(count($parts) == 1) {
|
||||||
|
$parts[1] = "32";
|
||||||
|
}
|
||||||
|
list($net, $mask) = $parts;
|
||||||
|
|
||||||
$ip_net = ip2long($net);
|
$ip_net = ip2long($net);
|
||||||
$ip_mask = ~((1 << (32 - (int)$mask)) - 1);
|
$ip_mask = ~((1 << (32 - (int)$mask)) - 1);
|
||||||
|
|
|
@ -226,4 +226,13 @@ class PolyfillsTest extends TestCase
|
||||||
stringer(["foo" => "bar", "baz" => [1,2,3], "qux" => ["a" => "b"]])
|
stringer(["foo" => "bar", "baz" => [1,2,3], "qux" => ["a" => "b"]])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_ip_in_range()
|
||||||
|
{
|
||||||
|
$this->assertTrue(ip_in_range("1.2.3.4", "1.2.0.0/16"));
|
||||||
|
$this->assertFalse(ip_in_range("4.3.2.1", "1.2.0.0/16"));
|
||||||
|
|
||||||
|
// A single IP should be interpreted as a /32
|
||||||
|
$this->assertTrue(ip_in_range("1.2.3.4", "1.2.3.4"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue