Author: glen Date: Wed Feb 22 12:03:54 2006 GMT Module: SOURCES Tag: HEAD ---- Log message: - updates from upstream CVS
---- Files affected: SOURCES: php-pear-HTTP_Upload-cvs.patch (NONE -> 1.1) (NEW) ---- Diffs: ================================================================ Index: SOURCES/php-pear-HTTP_Upload-cvs.patch diff -u /dev/null SOURCES/php-pear-HTTP_Upload-cvs.patch:1.1 --- /dev/null Wed Feb 22 13:03:54 2006 +++ SOURCES/php-pear-HTTP_Upload-cvs.patch Wed Feb 22 13:03:49 2006 @@ -0,0 +1,350 @@ +without locale messages addon from +http://cvs.php.net/viewcvs.cgi/pear/HTTP_Upload/Upload.php?r1=1.42&r2=1.53&view=patch + +--- Upload.php 2004/08/08 09:37:50 1.42 ++++ Upload.php 2006/02/11 17:45:50 1.53 +@@ -280,6 +311,13 @@ + var $files = array(); + + /** ++ * Whether the files array has already been built or not ++ * @var int ++ * @access private ++ */ ++ var $is_built = false; ++ ++ /** + * Contains the desired chmod for uploaded files + * @var int + * @access private +@@ -287,6 +325,19 @@ + var $_chmod = HTTP_UPLOAD_DEFAULT_CHMOD; + + /** ++ * Specially used if the naming mode is 'seq' ++ * Contains file naming information ++ * ++ * @var array ++ * @access private ++ */ ++ var $_modeNameSeq = array( ++ 'flag' => false, ++ 'prepend' => '', ++ 'append' => '', ++ ); ++ ++ /** + * Constructor + * + * @param string $lang Language to use for reporting errors +@@ -328,22 +379,22 @@ + */ + function &getFiles($file = null) + { +- static $is_built = false; + //build only once for multiple calls +- if (!$is_built) { ++ if (!$this->is_built) { + $files = &$this->_buildFiles(); + if (PEAR::isError($files)) { + // there was an error with the form. + // Create a faked upload embedding the error ++ $files_code = $files->getCode(); + $this->files['_error'] = &new HTTP_Upload_File( + '_error', null, + null, null, +- null, $files->getCode(), ++ null, $files_code, + $this->lang, $this->_chmod); + } else { + $this->files = $files; + } +- $is_built = true; ++ $this->is_built = true; + } + if ($file !== null) { + if (is_int($file)) { +@@ -362,11 +413,12 @@ + } else { + // developer didn't specify this name in the form + // warn him about it with a faked upload +- return new HTTP_Upload_File( +- '_error', null, +- null, null, +- null, 'DEV_NO_DEF_FILE', +- $this->lang); ++ $huf =& new HTTP_Upload_File( ++ '_error', null, ++ null, null, ++ null, 'DEV_NO_DEF_FILE', ++ $this->lang); ++ return $huf; + } + } + return $this->files; +@@ -383,7 +435,8 @@ + if (!isset($this->content_type) || + strpos($this->content_type, 'multipart/form-data') !== 0) + { +- return $this->raiseError('BAD_FORM'); ++ $error =& $this->raiseError('BAD_FORM'); ++ return $error; + } + // In 4.1 $_FILES isn't initialized when no uploads + // XXX (cox) afaik, in >= 4.1 and <= 4.3 only +@@ -457,11 +510,14 @@ + function isMissing() + { + if (count($this->post_files) < 1) { +- return $this->raiseError('NO_USER_FILE'); ++ $error =& $this->raiseError('NO_USER_FILE'); ++ return $error; + } + //we also check if at least one file has more than 0 bytes :) + $files = array(); + $size = 0; ++ $error = null; ++ + foreach ($this->post_files as $userfile => $value) { + if (is_array($value['name'])) { + foreach ($value['name'] as $key => $val) { +@@ -469,10 +525,12 @@ + } + } else { //one file + $size = $value['size']; ++ $error = $value['error']; + } + } +- if ($size == 0) { +- $this->raiseError('NO_USER_FILE'); ++ if ($error != 2 && $size == 0) { ++ $error =& $this->raiseError('NO_USER_FILE'); ++ return $error; + } + return false; + } +@@ -525,14 +583,14 @@ + * @access private + * @see HTTP_Upload_File::setValidExtensions() + */ +- var $_extensions_check = array('php', 'phtm', 'phtml', 'php3', 'inc'); ++ var $_extensionsCheck = array('php', 'phtm', 'phtml', 'php3', 'inc'); + + /** + * @see HTTP_Upload_File::setValidExtensions() + * @var string + * @access private + */ +- var $_extensions_mode = 'deny'; ++ var $_extensionsMode = 'deny'; + + /** + * Contains the desired chmod for uploaded files +@@ -560,7 +618,7 @@ + $this->HTTP_Upload_Error($lang); + $ext = null; + +- if (empty($name) || $size == 0) { ++ if (empty($name) || ($error != 'TOO_LARGE' && $size == 0)) { + $error = 'NO_USER_FILE'; + } elseif ($tmp == 'none') { + $error = 'TOO_LARGE'; +@@ -602,7 +660,7 @@ + /** + * Sets the name of the destination file + * +- * @param string $mode A valid mode: 'uniq', 'safe' or 'real' or a file name ++ * @param string $mode A valid mode: 'uniq', 'seq', 'safe' or 'real' or a file name + * @param string $prepend A string to prepend to the name + * @param string $append A string to append to the name + * +@@ -628,6 +686,11 @@ + case 'real': + $name = $this->upload['real']; + break; ++ case 'seq': ++ $this->_modeNameSeq['flag'] = true; ++ $this->_modeNameSeq['prepend'] = $prepend; ++ $this->_modeNameSeq['append'] = $append; ++ break; + default: + $name = $mode; + } +@@ -637,6 +700,46 @@ + } + + /** ++ * Sequence file names in the form: userGuide[1].pdf, userGuide[2].pdf ... ++ * ++ * @param string $dir Destination directory ++ */ ++ function nameToSeq($dir) ++ { ++ //Check if a file with the same name already exists ++ $name = $dir . DIRECTORY_SEPARATOR . $this->upload['real']; ++ if ([EMAIL PROTECTED]($name)) { ++ return $this->upload['real']; ++ } else { ++ //we need to strip out the extension and the '.' of the file ++ //e.g 'userGuide.pdf' becomes 'userGuide' ++ $baselength = strlen($this->upload['real']) - strlen($this->upload['ext']) - 1; ++ $basename = substr( $this->upload['real'],0, $baselength ); ++ ++ //here's the pattern we're looking for ++ $pattern = '(\[)([[:digit:]]+)(\])$'; ++ ++ //just incase the original filename had a sequence, we take it out ++ // e.g: 'userGuide[3]' should become 'userGuide' ++ $basename = ereg_replace($pattern, '', $basename); ++ ++ /* ++ * attempt to find a unique sequence file name ++ */ ++ $i = 1; ++ ++ while (true) { ++ $filename = $basename . '[' . $i . '].' . $this->upload['ext']; ++ $check = $dir . DIRECTORY_SEPARATOR . $filename; ++ if ([EMAIL PROTECTED]($check)) { ++ return $filename; ++ } ++ $i++; ++ } ++ } ++ } ++ ++ /** + * Unique file names in the form: 9022210413b75410c28bef.html + * @see HTTP_Upload_File::setName() + */ +@@ -660,8 +763,8 @@ + */ + function nameToSafe($name, $maxlen=250) + { +- $noalpha = '[EMAIL PROTECTED]'; +- $alpha = 'AEIOUYaeiouyAEIOUaeiouAEIOUaeiouAEIOUaeiouyAaOoAaNnCcaooa'; ++ $noalpha = '[EMAIL PROTECTED]'; ++ $alpha = 'AEIOUYaeiouyAEIOUaeiouAEIOUaeiouAEIOUaeiouyAaOoAaNnCcaooaTtAa'; + + $name = substr($name, 0, $maxlen); + $name = strtr($name, $noalpha, $alpha); +@@ -715,47 +818,59 @@ + /** + * Moves the uploaded file to its destination directory. + * +- * @param string $dir_dest Destination directory +- * @param bool $overwrite Overwrite if destination file exists? +- * @return mixed True on success or Pear_Error object on error ++ * @param string $dir Destination directory ++ * @param bool $overwrite Overwrite if destination file exists? ++ * @return mixed True on success or PEAR_Error object on error + * @access public + */ +- function moveTo($dir_dest, $overwrite = true) ++ function moveTo($dir, $overwrite = true) + { + if (!$this->isValid()) { +- return $this->raiseError($this->upload['error']); ++ $error =& $this->raiseError($this->upload['error']); ++ return $error; + } + + //Valid extensions check + if (!$this->_evalValidExtensions()) { +- return $this->raiseError('NOT_ALLOWED_EXTENSION'); ++ $error =& $this->raiseError('NOT_ALLOWED_EXTENSION'); ++ return $error; + } + +- $err_code = $this->_chk_dir_dest($dir_dest); ++ $err_code = $this->_chkDirDest($dir); + if ($err_code !== false) { +- return $this->raiseError($err_code); ++ $error =& $this->raiseError($err_code); ++ return $error; + } + // Use 'safe' mode by default if no other was selected + if (!$this->mode_name_selected) { + $this->setName('safe'); + } + +- $name_dest = $dir_dest . DIRECTORY_SEPARATOR . $this->upload['name']; ++ //test to see if we're working with sequence naming mode ++ if ($this->_modeNameSeq['flag'] === true) { ++ $this->upload['name'] = $this->_modeNameSeq['prepend'] . $this->nameToSeq($dir) . $this->_modeNameSeq['append']; ++ } ++ ++ $name = $dir . DIRECTORY_SEPARATOR . $this->upload['name']; + +- if (@is_file($name_dest)) { ++ if (@is_file($name)) { + if ($overwrite !== true) { +- return $this->raiseError('FILE_EXISTS'); +- } elseif (!is_writable($name_dest)) { +- return $this->raiseError('CANNOT_OVERWRITE'); ++ $error =& $this->raiseError('FILE_EXISTS'); ++ return $error; ++ } elseif (!is_writable($name)) { ++ $error =& $this->raiseError('CANNOT_OVERWRITE'); ++ return $error; + } + } + + // copy the file and let php clean the tmp +- if ([EMAIL PROTECTED]($this->upload['tmp_name'], $name_dest)) { +- return $this->raiseError('E_FAIL_MOVE'); +- } +- @chmod($name_dest, $this->_chmod); +- return $this->getProp('name'); ++ if ([EMAIL PROTECTED]($this->upload['tmp_name'], $name)) { ++ $error =& $this->raiseError('E_FAIL_MOVE'); ++ return &error; ++ } ++ @chmod($name, $this->_chmod); ++ $prop =& $this->getProp('name'); ++ return $prop; + } + + /** +@@ -764,15 +879,15 @@ + * @param string $dir_dest Destination dir + * @return mixed False on no errors or error code on error + */ +- function _chk_dir_dest($dir_dest) ++ function _chkDirDest($dir_dest) + { + if (!$dir_dest) { + return 'MISSING_DIR'; + } +- if ([EMAIL PROTECTED] ($dir_dest)) { ++ if ([EMAIL PROTECTED]($dir_dest)) { + return 'IS_NOT_DIR'; + } +- if (!is_writeable ($dir_dest)) { ++ if (!is_writeable($dir_dest)) { + return 'NO_WRITE_PERMS'; + } + return false; +@@ -826,8 +941,8 @@ + */ + function setValidExtensions($exts, $mode = 'deny') + { +- $this->_extensions_check = $exts; +- $this->_extensions_mode = $mode; ++ $this->_extensionsCheck = $exts; ++ $this->_extensionsMode = $mode; + } + + /** +@@ -838,9 +953,9 @@ + */ + function _evalValidExtensions() + { +- $exts = $this->_extensions_check; ++ $exts = $this->_extensionsCheck; + settype($exts, 'array'); +- if ($this->_extensions_mode == 'deny') { ++ if ($this->_extensionsMode == 'deny') { + if (in_array($this->getProp('ext'), $exts)) { + return false; + } ================================================================ _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
