]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-14123 cleanremoteaddr improvements and added unit tests
authorskodak <skodak>
Fri, 9 Jan 2009 10:16:07 +0000 (10:16 +0000)
committerskodak <skodak>
Fri, 9 Jan 2009 10:16:07 +0000 (10:16 +0000)
lib/moodlelib.php
lib/simpletest/testmoodlelib.php

index f9e3f23e29e387933e8ae5eecf9d852666f0c151..1169490c5d9d776c8148c3f6f0dcb3118885a082 100644 (file)
@@ -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;
index f2947eb3b39f152feca0f1f60faca6abd98e1adc..f5007767825824fe389c28d0b32f484bf344b071 100644 (file)
@@ -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></?$(*DSFMO#$*)(SDJ)($*)');
 
         $this->assertEqual(clean_param('#()*#,9789\'".,<42897></?$(*DSFMO#$*)(SDJ)($*)', PARAM_CLEAN),
-            '#()*#,9789\\\'\".,');
+            '#()*#,9789\'".,');
 
         // Test PARAM_URL and PARAM_LOCALURL a bit
         $this->assertEqual(clean_param('http://google.com/', PARAM_URL), 'http://google.com/');