Browse Source

ZF-3527
Ensure that urls returned by getBaseUrl() are urldecod()'d before they are returned

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@23365 44c647ce-9c0f-0410-b52a-842ac1e357ba

ralph 15 years ago
parent
commit
773b5952a6

+ 3 - 1
library/Zend/Controller/Request/Http.php

@@ -551,7 +551,7 @@ class Zend_Controller_Request_Http extends Zend_Controller_Request_Abstract
             $this->setBaseUrl();
         }
 
-        return $this->_baseUrl;
+        return urldecode($this->_baseUrl);
     }
 
     /**
@@ -622,6 +622,8 @@ class Zend_Controller_Request_Http extends Zend_Controller_Request_Abstract
             if ($pos = strpos($requestUri, '?')) {
                 $requestUri = substr($requestUri, 0, $pos);
             }
+            
+            $requestUri = urldecode($requestUri);
 
             if (null !== $baseUrl
                 && ((!empty($baseUrl) && 0 === strpos($requestUri, $baseUrl)) 

+ 64 - 0
tests/Zend/Controller/Request/HttpTest.php

@@ -886,6 +886,70 @@ class Zend_Controller_Request_HttpTest extends PHPUnit_Framework_TestCase
         
         $this->assertSame('', $this->_request->getHeader('X-Foo'));
     }
+    
+    
+    /**
+     * @group ZF-3527
+     */
+    public function testGetRequestUriShouldReturnDecodedUri()
+    {
+        $request = new Zend_Controller_Request_Http();
+        $request->setBaseUrl( '%7Euser' );
+        $this->assertEquals( '~user', $request->getBaseUrl() );
+    }
+
+    /**
+     * @group ZF-3527
+     */
+    public function testPathInfoShouldRespectEncodedBaseUrl()
+    {
+        $request = new Zend_Controller_Request_Http();
+        $request->setBaseUrl( '%7Euser' );
+        $_SERVER['REQUEST_URI'] = '~user/module/controller/action';
+        $pathInfo = $request->getPathInfo();
+
+        $this->assertEquals( '/module/controller/action', $pathInfo, $pathInfo);
+    }
+
+    /**
+     * @group ZF-3527
+     */
+    public function testPathInfoShouldRespectNonEncodedBaseUrl()
+    {
+        $request = new Zend_Controller_Request_Http();
+        $request->setBaseUrl( '~user' );
+        $_SERVER['REQUEST_URI'] = '~user/module/controller/action';
+        $pathInfo = $request->getPathInfo();
+
+        $this->assertEquals( '/module/controller/action', $pathInfo, $pathInfo);
+    }
+
+    /**
+     * @group ZF-3527
+     */
+    public function testPathInfoShouldRespectEncodedRequestUri()
+    {
+        $request = new Zend_Controller_Request_Http();
+        $request->setBaseUrl( '~user' );
+        $_SERVER['REQUEST_URI'] = '%7Euser/module/controller/action';
+        $pathInfo = $request->getPathInfo();
+
+        $this->assertEquals( '/module/controller/action', $pathInfo, $pathInfo);
+    }
+
+    /**
+     * @group ZF-3527
+     */
+    public function testPathInfoShouldRespectNonEncodedRequestUri()
+    {
+        $request = new Zend_Controller_Request_Http();
+        $request->setBaseUrl( '~user' );
+        $_SERVER['REQUEST_URI'] = '~user/module/controller/action';
+        $pathInfo = $request->getPathInfo();
+
+        $this->assertEquals( '/module/controller/action', $pathInfo, $pathInfo);
+    }
+    
 }
 
 // Call Zend_Controller_Request_HttpTest::main() if this source file is executed directly.