Jelajahi Sumber

Merge branch 'hotfix/224'

Close #224
Matthew Weier O'Phinney 12 tahun lalu
induk
melakukan
25842495ba

+ 9 - 0
library/Zend/Validate/File/ExcludeMimeType.php

@@ -39,6 +39,15 @@ class Zend_Validate_File_ExcludeMimeType extends Zend_Validate_File_MimeType
     const NOT_READABLE = 'fileExcludeMimeTypeNotReadable';
 
     /**
+     * @var array Error message templates
+     */
+    protected $_messageTemplates = array(
+        self::FALSE_TYPE   => "File '%value%' has a false mimetype of '%type%'",
+        self::NOT_DETECTED => "The mimetype of file '%value%' could not be detected",
+        self::NOT_READABLE => "File '%value%' is not readable or does not exist",
+    );
+
+    /**
      * Defined by Zend_Validate_Interface
      *
      * Returns true if the mimetype of the file does not matche the given ones. Also parts

+ 1 - 2
library/Zend/Validate/File/MimeType.php

@@ -34,13 +34,12 @@ require_once 'Zend/Validate/Abstract.php';
  */
 class Zend_Validate_File_MimeType extends Zend_Validate_Abstract
 {
-    /**#@+
+    /**
      * @const Error type constants
      */
     const FALSE_TYPE   = 'fileMimeTypeFalse';
     const NOT_DETECTED = 'fileMimeTypeNotDetected';
     const NOT_READABLE = 'fileMimeTypeNotReadable';
-    /**#@-*/
 
     /**
      * @var array Error message templates

+ 1 - 0
tests/Zend/Validate/File/AllTests.php

@@ -66,6 +66,7 @@ class Zend_Validate_File_AllTests
         $suite->addTestSuite('Zend_Validate_File_CountTest');
         $suite->addTestSuite('Zend_Validate_File_Crc32Test');
         $suite->addTestSuite('Zend_Validate_File_ExcludeExtensionTest');
+        $suite->addTestSuite('Zend_Validate_File_ExcludeMimeTypeTest');
         $suite->addTestSuite('Zend_Validate_File_ExistsTest');
         $suite->addTestSuite('Zend_Validate_File_ExtensionTest');
         $suite->addTestSuite('Zend_Validate_File_FilesSizeTest');

+ 25 - 8
tests/Zend/Validate/File/ExcludeMimeTypeTest.php

@@ -61,20 +61,22 @@ class Zend_Validate_File_ExcludeMimeTypeTest extends PHPUnit_Framework_TestCase
     public function testBasic()
     {
         $valuesExpected = array(
-            array('image/gif', false),
+            array('image/gif', true),
+            array('image/jpeg', false),
             array('image', false),
             array('test/notype', true),
             array('image/gif, image/jpeg', false),
-            array(array('image/vasa', 'image/gif'), false),
-            array(array('image/jpeg', 'gif'), false),
-            array(array('image/jpeg', 'jpeg'), true),
+            array(array('image/vasa', 'image/jpeg'), false),
+            array(array('image/gif', 'jpeg'), false),
+            array(array('image/gif', 'gif'), true),
         );
 
+        $filetest = dirname(__FILE__) . '/_files/picture.jpg';
         $files = array(
-            'name'     => 'testsize.mo',
-            'type'     => 'image/gif',
+            'name'     => 'picture.jpg',
+            'type'     => 'image/jpeg',
             'size'     => 200,
-            'tmp_name' => dirname(__FILE__) . '/_files/testsize.mo',
+            'tmp_name' => $filetest,
             'error'    => 0
         );
 
@@ -83,7 +85,7 @@ class Zend_Validate_File_ExcludeMimeTypeTest extends PHPUnit_Framework_TestCase
             $validator->enableHeaderCheck();
             $this->assertEquals(
                 $element[1],
-                $validator->isValid(dirname(__FILE__) . '/_files/testsize.mo', $files),
+                $validator->isValid($filetest, $files),
                 "Tested with " . var_export($element, 1)
             );
         }
@@ -151,6 +153,21 @@ class Zend_Validate_File_ExcludeMimeTypeTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('image/gif,text,jpg,to,zip,ti', $validator->getMimeType());
         $this->assertEquals(array('image/gif', 'text', 'jpg', 'to', 'zip', 'ti'), $validator->getMimeType(true));
     }
+
+
+    /**
+     * Ensure validator is not affected by PHP bug #63976
+     */
+    public function testShouldHaveProperErrorMessageOnNotReadableFile()
+    {
+        $validator = new Zend_Validate_File_ExcludeMimeType('image/jpeg');
+
+        $this->assertFalse($validator->isValid('notexisting'), array('name' => 'notexisting'));
+        $this->assertEquals(
+            array('fileExcludeMimeTypeNotReadable' => "File 'notexisting' is not readable or does not exist"),
+            $validator->getMessages()
+        );
+    }
 }
 
 // Call Zend_Validate_File_ExcludeMimeTypeTest::main() if this source file is executed directly.