From 65de686486174d04588156467ef50f1ec411d5f4 Mon Sep 17 00:00:00 2001 From: skodak Date: Fri, 9 Jan 2009 10:16:07 +0000 Subject: [PATCH] MDL-14123 cleanremoteaddr improvements and added unit tests --- lib/moodlelib.php | 23 +++++++++++++++++++++-- lib/simpletest/testmoodlelib.php | 21 ++++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/lib/moodlelib.php b/lib/moodlelib.php index f9e3f23e29..1169490c5d 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -7493,8 +7493,27 @@ function cleanremoteaddr($addr, $compress=false) { $result = implode(':', $parts); - if ($compress) { - $result = preg_replace('/:?0:0:(0:)*/', '::', $result, 1); + if (!$compress) { + return $result; + } + + if ($result === '0:0:0:0:0:0:0:0') { + return '::'; // all addresses + } + + $compressed = preg_replace('/(:0)+:0$/', '::', $result, 1); + if ($compressed !== $result) { + return $compressed; + } + + $compressed = preg_replace('/^(0:){2,7}/', '::', $result, 1); + if ($compressed !== $result) { + return $compressed; + } + + $compressed = preg_replace('/(:0){2,6}:/', '::', $result, 1); + if ($compressed !== $result) { + return $compressed; } return $result; diff --git a/lib/simpletest/testmoodlelib.php b/lib/simpletest/testmoodlelib.php index f2947eb3b3..f500776782 100644 --- a/lib/simpletest/testmoodlelib.php +++ b/lib/simpletest/testmoodlelib.php @@ -71,6 +71,25 @@ class moodlelib_test extends MoodleUnitTestCase { function tearDown() { } + function test_cleanremoteaddr() { + //IPv4 + $this->assertEqual(cleanremoteaddr('1023.121.234.1'), null); + $this->assertEqual(cleanremoteaddr('123.121.234.01 '), '123.121.234.1'); + + //IPv6 + $this->assertEqual(cleanremoteaddr('0:0:0:0:0:0:0:0:0'), null); + $this->assertEqual(cleanremoteaddr('0:0:0:0:0:0:0:abh'), null); + $this->assertEqual(cleanremoteaddr('0:0:0:::0:0:1'), null); + $this->assertEqual(cleanremoteaddr('0:0:0:0:0:0:0:0', true), '::'); + $this->assertEqual(cleanremoteaddr('0:0:0:0:0:0:1:1', true), '::1:1'); + $this->assertEqual(cleanremoteaddr('abcd:00ef:0:0:0:0:0:0', true), 'abcd:ef::'); + $this->assertEqual(cleanremoteaddr('1:0:0:0:0:0:0:1', true), '1::1'); + $this->assertEqual(cleanremoteaddr('::10:1', false), '0:0:0:0:0:0:10:1'); + $this->assertEqual(cleanremoteaddr('01:1::', false), '1:1:0:0:0:0:0:0'); + $this->assertEqual(cleanremoteaddr('10::10', false), '10:0:0:0:0:0:0:10'); + $this->assertEqual(cleanremoteaddr('::ffff:192.168.1.1', true), '::ffff:c0a8:11'); + } + function test_address_in_subnet() { $this->assertTrue(address_in_subnet('123.121.234.1', '123.121.234.1')); $this->assertFalse(address_in_subnet('123.121.234.2', '123.121.234.1')); @@ -183,7 +202,7 @@ class moodlelib_test extends MoodleUnitTestCase { '#()*#,9789\'".,<42897>assertEqual(clean_param('#()*#,9789\'".,<42897>assertEqual(clean_param('http://google.com/', PARAM_URL), 'http://google.com/'); -- 2.39.5