diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2013-11-25 14:21:51 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2013-11-25 14:21:51 +0100 |
commit | a0a665ea459fe96a0006766cc0d0b25e5cd258df (patch) | |
tree | ab426a2ff9e3c7a2024f51efe2736cc8a2dc541a | |
parent | de2b4440301badf48e638ede84f64692f2a2db41 (diff) | |
download | nextcloud-server-a0a665ea459fe96a0006766cc0d0b25e5cd258df.tar.gz nextcloud-server-a0a665ea459fe96a0006766cc0d0b25e5cd258df.zip |
handle duplicate slashes in case of reverse proxy configuration
-rwxr-xr-x | lib/private/request.php | 5 | ||||
-rw-r--r-- | tests/lib/request.php | 20 |
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/private/request.php b/lib/private/request.php index d11e5b16cfe..9cf09ac7343 100755 --- a/lib/private/request.php +++ b/lib/private/request.php @@ -136,7 +136,10 @@ class OC_Request { * @returns string Path info or false when not found */ public static function getRawPathInfo() { - $path_info = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME'])); + $requestUri = $_SERVER['REQUEST_URI']; + // remove too many leading slashes - can be caused by reverse proxy configuration + $requestUri = '/' . ltrim($requestUri, '/'); + $path_info = substr($requestUri, strlen($_SERVER['SCRIPT_NAME'])); // Remove the query string from REQUEST_URI if ($pos = strpos($path_info, '?')) { $path_info = substr($path_info, 0, $pos); diff --git a/tests/lib/request.php b/tests/lib/request.php index 2b2094a612d..d7ccb2146d4 100644 --- a/tests/lib/request.php +++ b/tests/lib/request.php @@ -23,4 +23,24 @@ class Test_Request extends PHPUnit_Framework_TestCase { $scriptName = OC_Request::scriptName(); $this->assertEquals('/domain.tld/ownCloud/tests/lib/request.php', $scriptName); } + + /** + * @dataProvider rawPathInfoProvider + * @param $expected + * @param $requestUri + * @param $scriptName + */ + public function testRawPathInfo($expected, $requestUri, $scriptName) { + $_SERVER['REQUEST_URI'] = $requestUri; + $_SERVER['SCRIPT_NAME'] = $scriptName; + $rawPathInfo = OC_Request::getRawPathInfo(); + $this->assertEquals($expected, $rawPathInfo); + } + + function rawPathInfoProvider() { + return array( + array('/core/ajax/translations.php', '/index.php/core/ajax/translations.php', '/index.php'), + array('/core/ajax/translations.php', '//index.php/core/ajax/translations.php', '/index.php'), + ); + } } |