From 2a93720f3f967775f7e5279b99348f8e4346e951 Mon Sep 17 00:00:00 2001 From: Thomas Müller Date: Tue, 26 Nov 2013 14:13:33 +0100 Subject: fixes #6050 --- lib/private/request.php | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'lib/private/request.php') diff --git a/lib/private/request.php b/lib/private/request.php index 7a75bf25208..bb3a05ba97d 100755 --- a/lib/private/request.php +++ b/lib/private/request.php @@ -142,17 +142,30 @@ class OC_Request { $requestUri = '/' . ltrim($requestUri, '/'); } + // Remove the query string from REQUEST_URI + if ($pos = strpos($requestUri, '?')) { + $requestUri = substr($requestUri, 0, $pos); + } + $scriptName = $_SERVER['SCRIPT_NAME']; - // in case uri and script name don't match we better throw an exception - if (strpos($requestUri, $scriptName) !== 0) { - throw new Exception("REQUEST_URI($requestUri) does not start with the SCRIPT_NAME($scriptName)"); + $path_info = $requestUri; + + // strip off the script name's dir and file name + list($path, $name) = \Sabre_DAV_URLUtil::splitPath($scriptName); + if (!empty($path)) { + if( $path === $path_info || strpos($path_info, $path.'/') === 0) { + $path_info = substr($path_info, strlen($path)); + } else { + throw new Exception("The requested uri($requestUri) cannot be processed by the script '$scriptName')"); + } } - $path_info = substr($requestUri, strlen($scriptName)); - // Remove the query string from REQUEST_URI - if ($pos = strpos($path_info, '?')) { - $path_info = substr($path_info, 0, $pos); + if (strpos($path_info, '/'.$name.'/') === 0) { + $path_info = substr($path_info, strlen($name) + 1); } - return $path_info; + if (strpos($path_info, $name) === 0) { + $path_info = substr($path_info, strlen($name)); + } + return rtrim($path_info, '/'); } /** -- cgit v1.2.3 From 52941341fde072410308ff1e27742095f5d38f21 Mon Sep 17 00:00:00 2001 From: Thomas Müller Date: Tue, 26 Nov 2013 16:52:33 +0100 Subject: fixing failing unit test --- lib/private/request.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/private/request.php') diff --git a/lib/private/request.php b/lib/private/request.php index bb3a05ba97d..37d918d2032 100755 --- a/lib/private/request.php +++ b/lib/private/request.php @@ -159,7 +159,7 @@ class OC_Request { throw new Exception("The requested uri($requestUri) cannot be processed by the script '$scriptName')"); } } - if (strpos($path_info, '/'.$name.'/') === 0) { + if (strpos($path_info, '/'.$name) === 0) { $path_info = substr($path_info, strlen($name) + 1); } if (strpos($path_info, $name) === 0) { -- cgit v1.2.3