From 4a478ae9f1f8bd6d6fcf3ead4672868c7de2cd90 Mon Sep 17 00:00:00 2001 From: Dominique Fournier Date: Mon, 11 May 2020 20:06:30 +0000 Subject: [PATCH] ipaddresses : invalid netmask2cidr mask was not correctely detected git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@5988 bf3deb0d-5f1a-0410-827f-c0cc1f45334c --- Tests/ipaddressesTest.php | 10 ++++++++-- ipaddresses.php | 9 ++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Tests/ipaddressesTest.php b/Tests/ipaddressesTest.php index 1603092..d72fded 100644 --- a/Tests/ipaddressesTest.php +++ b/Tests/ipaddressesTest.php @@ -355,13 +355,13 @@ class ipaddressesTest extends PHPUnit_Framework_TestCase { $i = new ipaddresses (); $res = $i->netmask2cidr ("127.0.0.0"); - $this->assertSame (7, $res); + $this->assertSame (false, $res); } public function test_netmask2cidr7 () { $i = new ipaddresses (); $res = $i->netmask2cidr ("63.0.0.0"); - $this->assertSame (6, $res); + $this->assertSame (false, $res); } public function test_netmask2cidr8 () { @@ -369,6 +369,12 @@ class ipaddressesTest extends PHPUnit_Framework_TestCase $res = $i->netmask2cidr ("155.0.0.0"); $this->assertSame (false, $res); } + public function test_netmask2cidr9 () + { + $i = new ipaddresses (); + $res = $i->netmask2cidr ("0.0.0.255"); + $this->assertSame (false, $res); + } public function test_netmask2cidrWildcard_1 () { diff --git a/ipaddresses.php b/ipaddresses.php index 5456fa0..c6ca209 100644 --- a/ipaddresses.php +++ b/ipaddresses.php @@ -494,14 +494,14 @@ class ipaddresses if ($netmask === FALSE) throw new \Exception (dgettext ("domframework", "Invalid netmask"), 500); $netmask = decbin ($netmask); + $netmask = sprintf ("%032s", $netmask); $res = -1; for ($i = 0 ; $i < 32 ; $i++) { - if (! isset ($netmask[$i])) + if ($res === -1 && $netmask[$i] === $maskdirect) { - break; } - elseif ($res == -1 && $netmask[$i] === $maskrevert) + elseif ($res === -1 && $netmask[$i] === $maskrevert) { $res = $i; } @@ -509,6 +509,9 @@ class ipaddresses { return false; } + else + { + } } if ($res === -1 && $i === 32) return 32;