diff options
author | Reid Linnemann <rlinnemann@netgate.com> | 2022-08-12 08:19:58 -0300 |
---|---|---|
committer | Renato Botelho <garga@FreeBSD.org> | 2022-08-12 08:23:28 -0300 |
commit | 1e7a9cbf5afa5e830a90b4285b5da0202d55f404 (patch) | |
tree | 426923cc55db71f064d5999e9e7349d9723068a1 /net/pear-Net_IPv6/files/patch-tests_AllTests.php | |
parent | devel/boost-python-libs: limit python 3.8-3.10 as py-numpy used yet (diff) |
net/pear-Net_IPv6: Add patches for handling zones
Summary:
The upstream Net/IPv6 package from PEAR has significant bugs revolving around
handling of string presentation v6 addresses which have RFC 4007 zones. Patches
are added in this commit to address them plus a handful of other errors until an
updated version of the package becomes available with these changes included.
* Add getZone() and removeZone() class methods
* Alter SplitV64() to remove any zone before attempting to split an address
into v6 and v4 parts. The zone has no meaning in this context
* Alter compress to remove and restore a zone prior to restoring a prefix
* Alter compress() to rejoin a compressed v6 part with a v4 part with a colon
if the v6 part does not already end with one
* Fix undefined variable '$address' in isCompressible()
* Ensure no zone is present at the end of an address in _ip2Bin(). The zone is
not a part of the binary address
* Change string/int arithmetic to int/int arithmetic in _ip2Bin by mapping
exploded v4 address octets to integer values
* Fix unit tests to work in modern versions of php and phpunit
* Align test case class name with source file name
* Use phpunit namespaces
* Make return type of AllTests::setUp() the expected 'void'
In addition, eight unit tests are added for basic verification of zone handling.
Sponsored by: Rubicon Communications, LLC ("Netgate")
Differential Revision: https://reviews.freebsd.org/D36151
Diffstat (limited to 'net/pear-Net_IPv6/files/patch-tests_AllTests.php')
-rw-r--r-- | net/pear-Net_IPv6/files/patch-tests_AllTests.php | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/net/pear-Net_IPv6/files/patch-tests_AllTests.php b/net/pear-Net_IPv6/files/patch-tests_AllTests.php new file mode 100644 index 000000000000..cfdf881b41b5 --- /dev/null +++ b/net/pear-Net_IPv6/files/patch-tests_AllTests.php @@ -0,0 +1,140 @@ +--- tests/AllTests.php.orig 2022-08-11 19:31:42 UTC ++++ tests/AllTests.php +@@ -19,6 +19,7 @@ require_once "Net/IPv6.php"; + // $Id: AllTests.php 340792 2016-10-29 14:56:52Z alexmerz $ + + require_once "Net/IPv6.php"; ++use PHPUnit\Framework\TestCase; + + /** + * This testcases tests for several bugs and general topics +@@ -28,7 +29,7 @@ require_once "Net/IPv6.php"; + * @version $Id: AllTests.php 340792 2016-10-29 14:56:52Z alexmerz $ + * @access public + */ +-class NetIPv6Test extends PHPUnit_Framework_TestCase { ++class AllTests extends TestCase { + + protected $ip; + +@@ -39,7 +40,7 @@ class NetIPv6Test extends PHPUnit_Framework_TestCase { + return $method; + } + +- public function setUp() { ++ public function setUp(): void { + $this->ip = new Net_IPv6(); + } + +@@ -742,6 +743,109 @@ class NetIPv6Test extends PHPUnit_Framework_TestCase { + $netmask = '::ffff/96'; + $testip = '0:0:0:0:0:ffff:c000:22f'; + $this->assertTrue(Net_IPv6::isInNetmask($testip, $netmask)); ++ } ++ ++ /** ++ * tests if checkIPv6 can handle addresses with zone ++ * @author Reid Linnemann <rlinnemann@netgate.com> ++ */ ++ public function testCheckIPv6WithZone() { ++ $testip = 'fe80::de:ad:be:ef%zone.name'; ++ $is = $this->ip->checkIPv6($testip); ++ ++ $this->assertTrue($is); ++ } ++ ++ /** ++ * tests if splitV64 can handle addresses with zone ++ * @author Reid Linnemann <rlinnemann@netgate.com> ++ */ ++ public function testSplitV64WithZone() { ++ $testip = 'fe80::de:ad:be:ef%zone.name'; ++ $zonelessip = 'fe80::de:ad:be:ef'; ++ $items = $this->ip->SplitV64($testip, false); ++ ++ $this->assertEquals(2, count($items)); ++ $this->assertEmpty($items[1]); ++ $this->assertEquals($zonelessip, $items[0]); ++ } ++ ++ /** ++ * tests zoned address compression ++ * @author Reid Linnemann ++ */ ++ public function testCompressWithZone() { ++ $uncompressedip = 'fe80:0:0:0:de:ad:be:ef%zone.name'; ++ $compressedip = 'fe80::de:ad:be:ef%zone.name'; ++ ++ $testip = $this->ip->compress($uncompressedip, false); ++ ++ $this->assertEquals($compressedip, $testip); ++ } ++ ++ /** ++ * tests zoned address compression with IPv4 part ++ * @author Reid Linnemann ++ */ ++ public function testCompressWithIPv4AndZone() { ++ $uncompressedip = 'fe80:0:0:0:dead:beef:172.10.1.1%zone.name'; ++ $compressedip = 'fe80::dead:beef:172.10.1.1%zone.name'; ++ ++ $testip = $this->ip->compress($uncompressedip, false); ++ ++ $this->assertEquals($compressedip, $testip); ++ } ++ ++ /** ++ * tests zoned address with prefix compression with IPv4 part ++ * @author Reid Linnemann ++ */ ++ public function testCompressWithIPv4AndZoneAndPrefix() { ++ $uncompressedip = 'fe80:0:0:0:dead:beef:172.10.1.1%zone.name/64'; ++ $compressedip = 'fe80::dead:beef:172.10.1.1%zone.name/64'; ++ ++ $testip = $this->ip->compress($uncompressedip, false); ++ ++ $this->assertEquals($compressedip, $testip); ++ } ++ ++ /** ++ * tests zoned address uncompression ++ * @author Reid Linnemann ++ */ ++ public function testUncompressWithZone() { ++ $uncompressedip = 'fe80:0:0:0:de:ad:be:ef%zone.name'; ++ $compressedip = 'fe80::de:ad:be:ef%zone.name'; ++ ++ $testip = $this->ip->uncompress($compressedip, false); ++ ++ $this->assertEquals($uncompressedip, $testip); ++ } ++ ++ /** ++ * tests zoned address uncompression with IPv4 part ++ * @author Reid Linnemann ++ */ ++ public function testUncompressWithIPv4AndZone() { ++ $uncompressedip = 'fe80:0:0:0:dead:beef:172.10.1.1%zone.name'; ++ $compressedip = 'fe80::dead:beef:172.10.1.1%zone.name'; ++ ++ $testip = $this->ip->uncompress($compressedip, false); ++ ++ $this->assertEquals($uncompressedip, $testip); ++ } ++ ++ /** ++ * tests zoned address with prefix uncompression with IPv4 part ++ * @author Reid Linnemann ++ */ ++ public function testUncompressWithIPv4AndZoneAndPrefix() { ++ $uncompressedip = 'fe80:0:0:0:dead:beef:172.10.1.1%zone.name/64'; ++ $compressedip = 'fe80::dead:beef:172.10.1.1%zone.name/64'; ++ ++ $testip = $this->ip->uncompress($compressedip, false); ++ ++ $this->assertEquals($uncompressedip, $testip); + } + +-} +\ No newline at end of file ++} |