Просмотр исходного кода

[ZF-4352] Zend_Validate:

 - fixed casting for stringlength validator
 - fixed casting for int validator
 - fixed casting for hex validator


git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@15922 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 лет назад
Родитель
Сommit
0662b1c71c

+ 8 - 7
library/Zend/Validate/Hex.php

@@ -35,9 +35,7 @@ require_once 'Zend/Validate/Abstract.php';
  */
 class Zend_Validate_Hex extends Zend_Validate_Abstract
 {
-    /**
-     * Validation failure message key for when the value contains characters other than hexadecimal digits
-     */
+    const INVALID = 'hexInvalid';
     const NOT_HEX = 'notHex';
 
     /**
@@ -46,6 +44,7 @@ class Zend_Validate_Hex extends Zend_Validate_Abstract
      * @var array
      */
     protected $_messageTemplates = array(
+        self::INVALID => "Invalid type given, value should be a string",
         self::NOT_HEX => "'%value%' has not only hexadecimal digit characters"
     );
 
@@ -59,11 +58,13 @@ class Zend_Validate_Hex extends Zend_Validate_Abstract
      */
     public function isValid($value)
     {
-        $valueString = (string) $value;
-
-        $this->_setValue($valueString);
+        if (!is_string($value) && !is_int($value)) {
+            $this->_error(self::INVALID);
+            return false;
+        }
 
-        if (!ctype_xdigit($valueString)) {
+        $this->_setValue($value);
+        if (!ctype_xdigit((string) $value)) {
             $this->_error();
             return false;
         }

+ 6 - 5
library/Zend/Validate/Int.php

@@ -37,12 +37,14 @@ require_once 'Zend/Locale/Format.php';
  */
 class Zend_Validate_Int extends Zend_Validate_Abstract
 {
+    const INVALID = 'intInvalid';
     const NOT_INT = 'notInt';
 
     /**
      * @var array
      */
     protected $_messageTemplates = array(
+        self::INVALID   => "Invalid type given, value should be a string or a integer",
         self::NOT_INT => "'%value%' does not appear to be an integer"
     );
 
@@ -83,18 +85,17 @@ class Zend_Validate_Int extends Zend_Validate_Abstract
      *
      * Returns true if and only if $value is a valid integer
      *
-     * @param  string $value
+     * @param  string|integer $value
      * @return boolean
      */
     public function isValid($value)
     {
-        $valueString = (string) $value;
-        $this->_setValue($valueString);
-        if (is_bool($value)) {
-            $this->_error();
+        if (!is_string($value) && !is_int($value) && !is_float($value)) {
+            $this->_error(self::INVALID);
             return false;
         }
 
+        $this->_setValue($value);
         try {
             if (!Zend_Locale_Format::isInteger($value, array('locale' => $this->_locale))) {
                 $this->_error();

+ 10 - 4
library/Zend/Validate/StringLength.php

@@ -32,6 +32,7 @@ require_once 'Zend/Validate/Abstract.php';
  */
 class Zend_Validate_StringLength extends Zend_Validate_Abstract
 {
+    const INVALID   = 'stringLengthInvalid';
     const TOO_SHORT = 'stringLengthTooShort';
     const TOO_LONG  = 'stringLengthTooLong';
 
@@ -39,6 +40,7 @@ class Zend_Validate_StringLength extends Zend_Validate_Abstract
      * @var array
      */
     protected $_messageTemplates = array(
+        self::INVALID   => "Invalid type given, value should be a string",
         self::TOO_SHORT => "'%value%' is less than %min% characters long",
         self::TOO_LONG  => "'%value%' is greater than %max% characters long"
     );
@@ -198,12 +200,16 @@ class Zend_Validate_StringLength extends Zend_Validate_Abstract
      */
     public function isValid($value)
     {
-        $valueString = (string) $value;
-        $this->_setValue($valueString);
+        if (!is_string($value)) {
+            $this->_error(self::INVALID);
+            return false;
+        }
+
+        $this->_setValue($value);
         if ($this->_encoding !== null) {
-            $length = iconv_strlen($valueString, $this->_encoding);
+            $length = iconv_strlen($value, $this->_encoding);
         } else {
-            $length = iconv_strlen($valueString);
+            $length = iconv_strlen($value);
         }
 
         if ($length < $this->_min) {

+ 8 - 2
tests/Zend/Validate/HexTest.php

@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Zend Framework
  *
@@ -21,7 +20,6 @@
  * @version    $Id$
  */
 
-
 /**
  * Test helper
  */
@@ -91,4 +89,12 @@ class Zend_Validate_HexTest extends PHPUnit_Framework_TestCase
     {
         $this->assertEquals(array(), $this->_validator->getMessages());
     }
+
+    /**
+     * @ZF-4352
+     */
+    public function testNonStringValidation()
+    {
+        $this->assertFalse($this->_validator->isValid(array(1 => 1)));
+    }
 }

+ 8 - 0
tests/Zend/Validate/IntTest.php

@@ -106,4 +106,12 @@ class Zend_Validate_IntTest extends PHPUnit_Framework_TestCase
         $this->assertEquals(false, $this->_validator->isValid('10 000'));
         $this->assertEquals(true, $this->_validator->isValid('10.000'));
     }
+
+    /**
+     * @ZF-4352
+     */
+    public function testNonStringValidation()
+    {
+        $this->assertFalse($this->_validator->isValid(array(1 => 1)));
+    }
 }

+ 8 - 0
tests/Zend/Validate/StringLengthTest.php

@@ -173,4 +173,12 @@ class Zend_Validate_StringLengthTest extends PHPUnit_Framework_TestCase
         $validator->setEncoding('ISO-8859-1');
         $this->assertEquals('ISO-8859-1', $validator->getEncoding());
     }
+
+    /**
+     * @ZF-4352
+     */
+    public function testNonStringValidation()
+    {
+        $this->assertFalse($this->_validator->isValid(array(1 => 1)));
+    }
 }