Permalink
Browse files

Merge pull request #452 from ltunc/named-bug

Fix urlencoded keys in named parameters.
  • Loading branch information...
2 parents 4dd13ef + 57eec6e commit 310a7a1acfeb3e1ca5d7929abe4f18532b0554fe @markstory markstory committed Jan 29, 2012
Showing with 21 additions and 0 deletions.
  1. +1 −0 lib/Cake/Routing/Route/CakeRoute.php
  2. +20 −0 lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php
@@ -275,6 +275,7 @@ protected function _parseArgs($args, $context) {
$separatorIsPresent = strpos($param, $namedConfig['separator']) !== false;
if ((!isset($this->options['named']) || !empty($this->options['named'])) && $separatorIsPresent) {
list($key, $val) = explode($namedConfig['separator'], $param, 2);
+ $key = rawurldecode($key);
$val = rawurldecode($val);
$hasRule = isset($rules[$key]);
$passIt = (!$hasRule && !$greedy) || ($hasRule && !$this->_matchNamed($val, $rules[$key], $context));
@@ -404,6 +404,26 @@ public function testParseNamedParametersUrlDecode() {
}
/**
+ * Ensure that keys at named parameters are urldecoded
+ *
+ * @return void
+ */
+ public function testParseNamedKeyUrlDecode() {
+ Router::connectNamed(true);
+ $route = new CakeRoute('/:controller/:action/*', array('plugin' => null));
+
+ // checking /post/index/user[0]:a/user[1]:b
+ $result = $route->parse('/posts/index/user%5B0%5D:a/user%5B1%5D:b');
+ $this->assertArrayHasKey('user', $result['named']);
+ $this->assertEquals(array('a', 'b'), $result['named']['user']);
+
+ // checking /post/index/user[]:a/user[]:b
+ $result = $route->parse('/posts/index/user%5B%5D:a/user%5B%5D:b');
+ $this->assertArrayHasKey('user', $result['named']);
+ $this->assertEquals(array('a', 'b'), $result['named']['user']);
+ }
+
+/**
* test that named params with null/false are excluded
*
* @return void

0 comments on commit 310a7a1

Please sign in to comment.