Index: tests/Zend/Validate/File/UploadTest.php =================================================================== --- tests/Zend/Validate/File/UploadTest.php (revision 23564) +++ tests/Zend/Validate/File/UploadTest.php (working copy) @@ -252,6 +252,18 @@ $validator->setFiles($files); $this->assertEquals($files, $validator->getFiles()); } + + /** + * @group ZF-10738 + */ + public function testSetFilesNull() + { + $_FILES = NULL; + $validator = new Zend_Validate_File_Upload(); + $validator->setFiles(NULL); + $this->assertEquals(array(), $validator->getFiles()); + } + } // Call Zend_Validate_File_UploadTest::main() if this source file is executed directly. Index: library/Zend/Validate/File/Upload.php =================================================================== --- library/Zend/Validate/File/Upload.php (revision 23564) +++ library/Zend/Validate/File/Upload.php (working copy) @@ -101,13 +101,15 @@ { if ($file !== null) { $return = array(); - foreach ($this->_files as $name => $content) { - if ($name === $file) { - $return[$file] = $this->_files[$name]; - } - - if ($content['name'] === $file) { - $return[$name] = $this->_files[$name]; + if (is_array($this->_files)) { + foreach ($this->_files as $name => $content) { + if ($name === $file) { + $return[$file] = $this->_files[$name]; + } + + if ($content['name'] === $file) { + $return[$name] = $this->_files[$name]; + } } } @@ -130,15 +132,19 @@ */ public function setFiles($files = array()) { - if (count($files) === 0) { - $this->_files = $_FILES; - } else { + if (is_array($files) && count($files) > 0) { $this->_files = $files; + } elseif (is_array($_FILES)) { + $this->_files = $_FILES; + } else { + $this->_files = array(); } - foreach($this->_files as $file => $content) { - if (!isset($content['error'])) { - unset($this->_files[$file]); + if (is_array($this->_files)) { + foreach($this->_files as $file => $content) { + if (!isset($content['error'])) { + unset($this->_files[$file]); + } } } @@ -157,16 +163,20 @@ public function isValid($value, $file = null) { $this->_messages = null; - if (array_key_exists($value, $this->_files)) { - $files[$value] = $this->_files[$value]; - } else { - foreach ($this->_files as $file => $content) { - if (isset($content['name']) && ($content['name'] === $value)) { - $files[$file] = $this->_files[$file]; - } + $files = array(); - if (isset($content['tmp_name']) && ($content['tmp_name'] === $value)) { - $files[$file] = $this->_files[$file]; + if (is_array($this->_files)) { + if (array_key_exists($value, $this->_files)) { + $files[$value] = $this->_files[$value]; + } else { + foreach ($this->_files as $file => $content) { + if (isset($content['name']) && ($content['name'] === $value)) { + $files[$file] = $this->_files[$file]; + } + + if (isset($content['tmp_name']) && ($content['tmp_name'] === $value)) { + $files[$file] = $this->_files[$file]; + } } } }