summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--system/core/Input.php4
-rw-r--r--tests/codeigniter/core/Input_test.php61
2 files changed, 58 insertions, 7 deletions
diff --git a/system/core/Input.php b/system/core/Input.php
index 6be4b9a6c..12332cf51 100644
--- a/system/core/Input.php
+++ b/system/core/Input.php
@@ -490,9 +490,9 @@ class CI_Input {
)
);
- for ($i = 0; $i < 8; $i++)
+ for ($j = 0; $j < 8; $j++)
{
- $ip[$i] = intval($ip[$i], 16);
+ $ip[$j] = intval($ip[$j], 16);
}
$sprintf = '%016b%016b%016b%016b%016b%016b%016b%016b';
diff --git a/tests/codeigniter/core/Input_test.php b/tests/codeigniter/core/Input_test.php
index 159a877dc..a632ee689 100644
--- a/tests/codeigniter/core/Input_test.php
+++ b/tests/codeigniter/core/Input_test.php
@@ -206,9 +206,23 @@ class Input_test extends CI_TestCase {
$this->markTestSkipped('TODO: Find a way to test HTTP headers');
}
- public function test_ip_address()
+ // --------------------------------------------------------------------
+
+ public function test_get_request_header()
{
+ //TODO: Find a way to test HTTP headers
+ $this->assertNull($this->input->get_request_header('test'));
+ }
+
+ // --------------------------------------------------------------------
+
+ public function test_ip_address()
+ {
+ $this->input->ip_address = TRUE;
+ $this->assertTrue($this->input->ip_address());
+
// 127.0.0.1 is set in our Bootstrap file
+ $this->input->ip_address = FALSE;
$this->assertEquals('127.0.0.1', $this->input->ip_address());
// Invalid
@@ -216,9 +230,46 @@ class Input_test extends CI_TestCase {
$this->input->ip_address = FALSE; // reset cached value
$this->assertEquals('0.0.0.0', $this->input->ip_address());
- // TODO: Add proxy_ips tests
-
- // Back to reality
+ $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
+
+ // Proxy_ips tests
+ $this->input->ip_address = FALSE;
+ $this->ci_set_config('proxy_ips', '127.0.0.3, 127.0.0.4, 127.0.0.2');
+ $_SERVER['HTTP_CLIENT_IP'] = '127.0.0.2';
+ $this->assertEquals('127.0.0.1', $this->input->ip_address());
+
+ // Invalid spoof
+ $this->input->ip_address = FALSE;
+ $this->ci_set_config('proxy_ips', 'invalid_ip_address');
+ $_SERVER['HTTP_CLIENT_IP'] = 'invalid_ip_address';
+ $this->assertEquals('127.0.0.1', $this->input->ip_address());
+
+ $this->input->ip_address = FALSE;
+ $this->ci_set_config('proxy_ips', 'http://foo/bar/baz, 127.0.0.1/1');
+ $_SERVER['HTTP_CLIENT_IP'] = '127.0.0.1';
+ $this->assertEquals('127.0.0.1', $this->input->ip_address());
+
+ $this->input->ip_address = FALSE;
+ $this->ci_set_config('proxy_ips', 'http://foo/bar/baz, 127.0.0.1/1');
+ $_SERVER['HTTP_CLIENT_IP'] = '127.0.0.2';
+ $this->assertNotEquals('127.0.0.1', $this->input->ip_address());
+
+ //IPv6
+ $this->input->ip_address = FALSE;
+ $this->ci_set_config('proxy_ips', 'FE80:0000:0000:0000:0202:B3FF:FE1E:8329/1, FE80:0000:0000:0000:0202:B3FF:FE1E:8300/2');
+ $_SERVER['HTTP_CLIENT_IP'] = 'FE80:0000:0000:0000:0202:B3FF:FE1E:8300';
+ $_SERVER['REMOTE_ADDR'] = 'FE80:0000:0000:0000:0202:B3FF:FE1E:8329';
+ $this->assertEquals('FE80:0000:0000:0000:0202:B3FF:FE1E:8300', $this->input->ip_address());
+
+ $this->input->ip_address = FALSE;
$_SERVER['REMOTE_ADDR'] = '127.0.0.1'; // back to reality
}
-}
+
+ // --------------------------------------------------------------------
+
+ public function test_user_agent()
+ {
+ $_SERVER['HTTP_USER_AGENT'] = 'test';
+ $this->assertEquals('test', $this->input->user_agent());
+ }
+} \ No newline at end of file