Browse Source

Make datetime validation objects.

Don't fail hard on objects getting into datetime validators.

Refs #10017
Mark Story 9 years ago
parent
commit
e7b4ccb1b3
2 changed files with 15 additions and 1 deletions
  1. 9 1
      src/Validation/Validation.php
  2. 6 0
      tests/TestCase/Validation/ValidationTest.php

+ 9 - 1
src/Validation/Validation.php

@@ -390,7 +390,9 @@ class Validation
         if ($check instanceof DateTimeInterface) {
             return true;
         }
-
+        if (is_object($check)) {
+            return false;
+        }
         if (is_array($check)) {
             $check = static::_getDateString($check);
             $format = 'ymd';
@@ -456,6 +458,9 @@ class Validation
         if ($check instanceof DateTimeInterface) {
             return true;
         }
+        if (is_object($check)) {
+            return false;
+        }
         $valid = false;
         if (is_array($check)) {
             $check = static::_getDateString($check);
@@ -507,6 +512,9 @@ class Validation
         if ($check instanceof DateTimeInterface) {
             return true;
         }
+        if (is_object($check)) {
+            return false;
+        }
         static $methods = [
             'date' => 'parseDate',
             'time' => 'parseTime',

+ 6 - 0
tests/TestCase/Validation/ValidationTest.php

@@ -22,6 +22,7 @@ use Cake\TestSuite\TestCase;
 use Cake\Validation\Validation;
 use Cake\Validation\Validator;
 use Locale;
+use stdClass;
 
 require_once __DIR__ . '/stubs.php';
 
@@ -929,6 +930,11 @@ class ValidationTest extends TestCase
         $this->assertTrue(Validation::time($dateTime));
         $this->assertTrue(Validation::dateTime($dateTime));
         $this->assertTrue(Validation::localizedTime($dateTime));
+
+        $this->assertFalse(Validation::time(new stdClass()));
+        $this->assertFalse(Validation::date(new stdClass()));
+        $this->assertFalse(Validation::dateTime(new stdClass()));
+        $this->assertFalse(Validation::localizedTime(new stdClass()));
     }
 
     /**