Updated CI_Input unit test and fixed error "undefined offset" caused by using the same variable name, $i, twice for for loop inside for loop.
Signed-off-by:Heesung Ahn <ahn.heesung@gmail.com>
diff --git a/system/core/Input.php b/system/core/Input.php
index 6be4b9a..12332cf 100644
--- a/system/core/Input.php
+++ b/system/core/Input.php
@@ -490,9 +490,9 @@
 								)
 							);
 
-							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 159a877..a632ee6 100644
--- a/tests/codeigniter/core/Input_test.php
+++ b/tests/codeigniter/core/Input_test.php
@@ -206,9 +206,23 @@
 		$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 @@
 		$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