diff --git a/lib/Cake/Network/CakeRequest.php b/lib/Cake/Network/CakeRequest.php index f14373370..646579da1 100644 --- a/lib/Cake/Network/CakeRequest.php +++ b/lib/Cake/Network/CakeRequest.php @@ -173,9 +173,13 @@ class CakeRequest implements ArrayAccess { if (ini_get('magic_quotes_gpc') === '1') { $this->data = stripslashes_deep($this->data); } + + $override = false; if (env('HTTP_X_HTTP_METHOD_OVERRIDE')) { $this->data['_method'] = env('HTTP_X_HTTP_METHOD_OVERRIDE'); + $override = true; } + $isArray = is_array($this->data); if ($isArray && isset($this->data['_method'])) { if (!empty($_SERVER)) { @@ -184,7 +188,13 @@ class CakeRequest implements ArrayAccess { $_ENV['REQUEST_METHOD'] = $this->data['_method']; } unset($this->data['_method']); + $override = true; } + + if ($override) { + $this->data = array(); + } + if ($isArray && isset($this->data['data'])) { $data = $this->data['data']; if (count($this->data) <= 1) { diff --git a/lib/Cake/Test/Case/Network/CakeRequestTest.php b/lib/Cake/Test/Case/Network/CakeRequestTest.php index b588565a5..b91cefc3e 100644 --- a/lib/Cake/Test/Case/Network/CakeRequestTest.php +++ b/lib/Cake/Test/Case/Network/CakeRequestTest.php @@ -2444,6 +2444,25 @@ XML; $request->allowMethod('POST'); } +/** + * Tests that overriding the method to GET will clean all request + * data, to better simulate a GET request. + * + * @return void + */ + public function testMethodOverrideEmptyData() + { + $_POST= array('_method' => 'GET', 'foo' => 'bar'); + $_SERVER['REQUEST_METHOD'] = 'PUT'; + $request = new CakeRequest('/posts/edit/1'); + $this->assertEmpty($request->data); + + $_POST= array('foo' => 'bar'); + $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] = 'GET'; + $request = new CakeRequest('/posts/edit/1'); + $this->assertEmpty($request->data); + } + /** * loadEnvironment method *