From bd53ef01a649d1f8c01764464d44d01faea6b070 Mon Sep 17 00:00:00 2001 From: Jose Lorenzo Rodriguez Date: Mon, 18 Jan 2016 20:34:32 -0430 Subject: [PATCH] Better method overriding emulation for GET --- lib/Cake/Network/CakeRequest.php | 10 ++++++++++ .../Test/Case/Network/CakeRequestTest.php | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lib/Cake/Network/CakeRequest.php b/lib/Cake/Network/CakeRequest.php index f14373370f3..646579da11d 100644 --- a/lib/Cake/Network/CakeRequest.php +++ b/lib/Cake/Network/CakeRequest.php @@ -173,9 +173,13 @@ protected function _processPost() { 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 @@ protected function _processPost() { $_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 b588565a5ef..b91cefc3e39 100644 --- a/lib/Cake/Test/Case/Network/CakeRequestTest.php +++ b/lib/Cake/Test/Case/Network/CakeRequestTest.php @@ -2444,6 +2444,25 @@ public function testAllowMethodException() { $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 *