From dec61b9d017e58132012227367a8e8a063d7cd4e Mon Sep 17 00:00:00 2001 From: Mark Story Date: Thu, 2 Feb 2017 22:34:58 -0500 Subject: [PATCH] Fix use of data() Fix a type error in getData() when request->data is invalid. --- src/Controller/Component/SecurityComponent.php | 2 +- src/Http/ServerRequest.php | 3 +++ tests/TestCase/Network/RequestTest.php | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Controller/Component/SecurityComponent.php b/src/Controller/Component/SecurityComponent.php index 25c1377395c..c657c32a421 100644 --- a/src/Controller/Component/SecurityComponent.php +++ b/src/Controller/Component/SecurityComponent.php @@ -265,7 +265,7 @@ protected function _authRequired(Controller $controller) $requireAuth = $this->_config['requireAuth']; if (in_array($request->getParam('action'), $requireAuth) || $requireAuth == ['*']) { - if (!isset($request->data['_Token'])) { + if ($request->getData('_Token') === null) { throw new AuthSecurityException('\'_Token\' was not found in request data.'); } diff --git a/src/Http/ServerRequest.php b/src/Http/ServerRequest.php index 0f2b6e5c88d..14da3f5a942 100644 --- a/src/Http/ServerRequest.php +++ b/src/Http/ServerRequest.php @@ -1489,6 +1489,9 @@ public function getData($name = null, $default = null) if ($name === null) { return $this->data; } + if (!is_array($this->data) && $name) { + return $default; + } return Hash::get($this->data, $name, $default); } diff --git a/tests/TestCase/Network/RequestTest.php b/tests/TestCase/Network/RequestTest.php index d9f8bff4fe8..f273fc22c9b 100644 --- a/tests/TestCase/Network/RequestTest.php +++ b/tests/TestCase/Network/RequestTest.php @@ -2520,7 +2520,7 @@ public function testReadingParams() * * @return void */ - public function testDataReading() + public function testGetData() { $post = [ 'Model' => [ @@ -2541,6 +2541,19 @@ public function testDataReading() $this->assertSame('default', $request->getData('Model.imaginary', 'default')); } + /** + * Test that getData() doesn't fail on scalar data. + * + * @return void + */ + public function testGetDataOnStringData() + { + $post = 'strange, but could happen'; + $request = new Request(compact('post')); + $this->assertNull($request->getData('Model')); + $this->assertNull($request->getData('Model.field')); + } + /** * Test writing with data() *