Преглед изворни кода

[ZF-4352] Zend_Validate:

 - fixed casting for barcode validator


git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@15920 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas пре 16 година
родитељ
комит
5f7ba58bcd
2 измењених фајлова са 18 додато и 6 уклоњено
  1. 8 5
      library/Zend/Validate/Barcode/UpcA.php
  2. 10 1
      tests/Zend/Validate/BarcodeTest.php

+ 8 - 5
library/Zend/Validate/Barcode/UpcA.php

@@ -67,15 +67,18 @@ class Zend_Validate_Barcode_UpcA extends Zend_Validate_Abstract
      */
     public function isValid($value)
     {
-        $valueString = (string) $value;
-        $this->_setValue($valueString);
+        if (!is_string($value)) {
+            $this->_error(self::INVALID);
+            return false;
+        }
 
-        if (strlen($valueString) !== 12) {
+        $this->_setValue($value);
+        if (strlen($value) !== 12) {
             $this->_error(self::INVALID_LENGTH);
             return false;
         }
 
-        $barcode = substr($valueString, 0, -1);
+        $barcode = substr($value, 0, -1);
         $oddSum  = 0;
         $evenSum = 0;
 
@@ -90,7 +93,7 @@ class Zend_Validate_Barcode_UpcA extends Zend_Validate_Abstract
         $calculation = ($oddSum + $evenSum) % 10;
         $checksum    = ($calculation === 0) ? 0 : 10 - $calculation;
 
-        if ($valueString[11] != $checksum) {
+        if ($value[11] != $checksum) {
             $this->_error(self::INVALID);
             return false;
         }

+ 10 - 1
tests/Zend/Validate/BarcodeTest.php

@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Zend Framework
  *
@@ -88,4 +87,14 @@ class Zend_Validate_BarcodeTest extends PHPUnit_Framework_TestCase
         $barcode->setType('ean-13');
         $this->assertTrue($barcode->isValid('0075678164125'));
     }
+
+    /**
+     * @ZF-4352
+     */
+    public function testNonStringValidation()
+    {
+        $barcode = new Zend_Validate_Barcode('upc-a');
+        $this->assertFalse($barcode->isValid(123.40));
+        $this->assertFalse($barcode->isValid(array('065100004327')));
+    }
 }