#23927 [Opn]: System::_parseArgv() fails if there are spaces
| From: | greg at chiaraquartet dot net | Date: | Sat, 31 May 2003 21:27:55 +0000 |
| Subject: | #23927 [Opn]: System::_parseArgv() fails if there are spaces | ||
| References: | 1 | Groups: | php.pear.dev |
| Request: | Send a blank email to pear-dev+get-16860@lists.php.net to get a copy of this message | ||
ID: 23927
User updated by: greg at chiaraquartet dot net
Reported By: greg at chiaraquartet dot net
Status: Open
Bug Type: PEAR related
Operating System: Windows XP
PHP Version: 4.3.2
New Comment:
A fix allows quoted arguments, so it would be called with
-t "C:\Web Pages" -d and expand properly.
Here is the diff with System.php:
64a65,93
> $newargv = array();
> $in_quote = false;
> $index = 0;
> foreach($argv as $arg)
> {
> if (!isset($newargv[$index])) {
> $newargv[$index] = '';
> }
> // combine quoted values into 1 string
> if (!$in_quote && $arg{0} == '"') {
> $newargv[$index] = substr($arg,1);
> $in_quote = true;
> } elseif ($in_quote && $arg{strlen($arg) - 1} == '"')
{
> $arg = ' ' . $arg;
> $newargv[$index] .= substr($arg,0,strlen($arg) -
1);
> $in_quote = false;
> $index++;
> } else {
> if ($in_quote) {
> $arg .= ' ';
> }
> $newargv[$index] .= $arg;
> if (!$in_quote) {
> // go to next value if not in a quote
> $index++;
> }
> }
> }
> $argv = $newargv;
and the diff against Packager.php:
119c119
< if (!($tmpdir = System::mktemp('-t '.getcwd().' -d'))) {
---
> if (!($tmpdir = System::mktemp('-t "'.getcwd().'" -d')))
> {
Previous Comments:
------------------------------------------------------------------------
[2003-05-31 14:17:15] greg at chiaraquartet dot net
the Pear packager attempts to mktemp a directory as a subdirectory of
the current directory. If the current directory has any spaces in its
name (I have C:\Web Pages), then it will fail.
This is because System::mktemp is called with "-t C:\Web Pages -d"
_parseArgv's use of a regexp parses the result into "-t C:\Web" and
"Pages -d"
A better command-line parsing algorithm is in phpDocumentor's Io class,
it allows spaces and simply recognizes the command-line params.
Greg
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=23927&edit=1