diff --git a/lib/Cake/Network/CakeRequest.php b/lib/Cake/Network/CakeRequest.php index 7342f123a46..cadbbbd0cc2 100644 --- a/lib/Cake/Network/CakeRequest.php +++ b/lib/Cake/Network/CakeRequest.php @@ -175,7 +175,8 @@ protected function _processPost() { if (env('HTTP_X_HTTP_METHOD_OVERRIDE')) { $this->data['_method'] = env('HTTP_X_HTTP_METHOD_OVERRIDE'); } - if (isset($this->data['_method'])) { + $isArray = is_array($this->data); + if ($isArray && isset($this->data['_method'])) { if (!empty($_SERVER)) { $_SERVER['REQUEST_METHOD'] = $this->data['_method']; } else { @@ -183,8 +184,7 @@ protected function _processPost() { } unset($this->data['_method']); } - - if (isset($this->data['data'])) { + if ($isArray && isset($this->data['data'])) { $data = $this->data['data']; if (count($this->data) <= 1) { $this->data = $data; diff --git a/lib/Cake/Test/Case/Network/CakeRequestTest.php b/lib/Cake/Test/Case/Network/CakeRequestTest.php index 321e92d9206..8ef0e186881 100644 --- a/lib/Cake/Test/Case/Network/CakeRequestTest.php +++ b/lib/Cake/Test/Case/Network/CakeRequestTest.php @@ -300,6 +300,22 @@ public function testPutParsing() { $this->assertEquals($data, $request->data); } +/** + * test parsing json PUT data into the object. + * + * @return void + */ + public function testPutParsingJSON() { + $_SERVER['REQUEST_METHOD'] = 'PUT'; + $_SERVER['CONTENT_TYPE'] = 'application/json'; + + $request = $this->getMock('TestCakeRequest', array('_readInput')); + $request->expects($this->at(0))->method('_readInput') + ->will($this->returnValue('{Article":["title"]}')); + $request->reConstruct(); + $this->assertEquals('{Article":["title"]}', $request->data); + } + /** * test parsing of FILES array *