Browse Source

Fix use of data()

Fix a type error in getData() when request->data is invalid.
Mark Story 9 years ago
parent
commit
dec61b9d01

+ 1 - 1
src/Controller/Component/SecurityComponent.php

@@ -265,7 +265,7 @@ class SecurityComponent extends Component
             $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.');
                 }
 

+ 3 - 0
src/Http/ServerRequest.php

@@ -1489,6 +1489,9 @@ class ServerRequest implements ArrayAccess, ServerRequestInterface
         if ($name === null) {
             return $this->data;
         }
+        if (!is_array($this->data) && $name) {
+            return $default;
+        }
 
         return Hash::get($this->data, $name, $default);
     }

+ 14 - 1
tests/TestCase/Network/RequestTest.php

@@ -2520,7 +2520,7 @@ class RequestTest extends TestCase
      *
      * @return void
      */
-    public function testDataReading()
+    public function testGetData()
     {
         $post = [
             'Model' => [
@@ -2542,6 +2542,19 @@ class RequestTest extends TestCase
     }
 
     /**
+     * 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()
      *
      * @return void