From 56f3917f362432e1674ba8b319fe8f4726f84dc2 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Wed, 27 Feb 2013 21:38:58 +0100
Subject: [PATCH] Use the plain urlencoded path info for the routing matching

---
 lib/base.php    |  2 +-
 lib/request.php | 15 ++++++++++++++-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/lib/base.php b/lib/base.php
index f9bb1bb11b..6c012208c7 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -596,7 +596,7 @@ class OC {
 		if (!self::$CLI) {
 			try {
 				OC_App::loadApps();
-				OC::getRouter()->match(OC_Request::getPathInfo());
+				OC::getRouter()->match(OC_Request::getRawPathInfo());
 				return;
 			} catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $e) {
 				//header('HTTP/1.0 404 Not Found');
diff --git a/lib/request.php b/lib/request.php
index 30a25df23a..9f74cf9beb 100755
--- a/lib/request.php
+++ b/lib/request.php
@@ -107,7 +107,7 @@ class OC_Request {
 		if (array_key_exists('PATH_INFO', $_SERVER)) {
 			$path_info = $_SERVER['PATH_INFO'];
 		}else{
-			$path_info = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME']));
+			$path_info = self::getRawPathInfo();
 			// following is taken from Sabre_DAV_URLUtil::decodePathSegment
 			$path_info = rawurldecode($path_info);
 			$encoding = mb_detect_encoding($path_info, array('UTF-8', 'ISO-8859-1'));
@@ -123,6 +123,19 @@ class OC_Request {
 		return $path_info;
 	}
 
+	/**
+	 * @brief get Path info from request, not urldecoded
+	 * @returns string Path info or false when not found
+	 */
+	public static function getRawPathInfo() {
+		$path_info = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME']));
+		// Remove the query string from REQUEST_URI
+		if ($pos = strpos($path_info, '?')) {
+			$path_info = substr($path_info, 0, $pos);
+		}
+		return $path_info;
+	}
+
 	/**
 	 * @brief Check if this is a no-cache request
 	 * @returns true for no-cache
-- 
GitLab