From dd69cfa1fe3100d851bd29b31e73d2dd5457f6cf Mon Sep 17 00:00:00 2001 From: Thomas Steur <thomas.steur@gmail.com> Date: Tue, 27 Oct 2015 00:44:29 +0000 Subject: [PATCH] make sure to return correct ip when all IPs are excluded --- core/IP.php | 4 +++- tests/PHPUnit/Unit/IPTest.php | 34 +++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/core/IP.php b/core/IP.php index 6e27832e48..670c674544 100644 --- a/core/IP.php +++ b/core/IP.php @@ -101,7 +101,7 @@ class IP * * @param string $csv Comma separated list of elements. * @param array $excludedIps Optional list of excluded IP addresses (or IP address ranges). - * @return string Last (non-excluded) IP address in the list. + * @return string Last (non-excluded) IP address in the list or an empty string if all given IPs are excluded. */ public static function getLastIpFromList($csv, $excludedIps = null) { @@ -115,6 +115,8 @@ class IP return $element; } } + + return ''; } return trim(Common::sanitizeInputValue($csv)); } diff --git a/tests/PHPUnit/Unit/IPTest.php b/tests/PHPUnit/Unit/IPTest.php index 2225144557..139687f619 100644 --- a/tests/PHPUnit/Unit/IPTest.php +++ b/tests/PHPUnit/Unit/IPTest.php @@ -10,11 +10,12 @@ namespace Piwik\Tests\Unit; -use Piwik\Common; use Piwik\Config; use Piwik\IP; -use Piwik\Tests\Framework\Mock\TestConfig; +/** + * @group Core + */ class IPTest extends \PHPUnit_Framework_TestCase { /** @@ -83,7 +84,6 @@ class IPTest extends \PHPUnit_Framework_TestCase /** * @dataProvider getIpFromHeaderTestData - * @group Core */ public function testGetIpFromHeader($description, $test) { @@ -111,8 +111,6 @@ class IPTest extends \PHPUnit_Framework_TestCase } /** - * @group Core - * * @dataProvider getIpTestData */ public function testGetNonProxyIpFromHeader($ip) @@ -121,8 +119,6 @@ class IPTest extends \PHPUnit_Framework_TestCase } /** - * @group Core - * * @dataProvider getIpTestData */ public function testGetNonProxyIpFromHeader2($ip) @@ -134,8 +130,6 @@ class IPTest extends \PHPUnit_Framework_TestCase } /** - * @group Core - * * @dataProvider getIpTestData */ public function testGetNonProxyIpFromHeader3($ip) @@ -154,6 +148,20 @@ class IPTest extends \PHPUnit_Framework_TestCase $this->assertEquals($ip, IP::getNonProxyIpFromHeader('1.1.1.1', array('HTTP_X_FORWARDED_FOR'))); } + /** + * See https://github.com/piwik/piwik/issues/8721 + */ + public function testGetNonProxyIpFromHeader4_ShouldReturnDefaultIp_IfDefaultIpIsGivenMultipleTimes() + { + // 1.1.1.1 is a trusted proxy + $_SERVER['REMOTE_ADDR'] = '1.1.1.1'; + $_SERVER['HTTP_X_FORWARDED_FOR'] = $_SERVER['REMOTE_ADDR']; + $_SERVER['HTTP_CF_CONNECTING_IP'] = $_SERVER['REMOTE_ADDR']; + + $this->assertEquals('1.1.1.1', IP::getNonProxyIpFromHeader('1.1.1.1', array('HTTP_X_FORWARDED_FOR', 'HTTP_CF_CONNECTING_IP'))); + unset($_SERVER['HTTP_CF_CONNECTING_IP']); + } + /** * Dataprovider for testGetLastIpFromList */ @@ -170,8 +178,6 @@ class IPTest extends \PHPUnit_Framework_TestCase } /** - * @group Core - * * @dataProvider getLastIpFromListTestData */ public function testGetLastIpFromList($csv, $expected) @@ -182,4 +188,10 @@ class IPTest extends \PHPUnit_Framework_TestCase // with excluded Ips $this->assertEquals($expected, IP::getLastIpFromList($csv . ', 10.10.10.10', array('10.10.10.10'))); } + + public function testGetLastIpFromList_shouldReturnAnEmptyString_IfMultipleIpsAreGivenButAllAreExcluded() + { + // with excluded Ips + $this->assertEquals('', IP::getLastIpFromList('10.10.10.10, 10.10.10.10', array('10.10.10.10'))); + } } -- GitLab