diff options
-rw-r--r-- | TSRM/tsrm_win32.c | 14 | ||||
-rw-r--r-- | ext/standard/tests/file/popen_pclose_error-win32-debug.phpt | 61 | ||||
-rw-r--r-- | ext/standard/tests/file/popen_pclose_error-win32.phpt | 57 | ||||
-rw-r--r-- | ext/standard/tests/file/popen_pclose_error.phpt | 4 |
4 files changed, 9 insertions, 127 deletions
diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c index 704d30e209..131523c253 100644 --- a/TSRM/tsrm_win32.c +++ b/TSRM/tsrm_win32.c @@ -468,17 +468,17 @@ TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, return NULL; } - /*The following two checks can be removed once we drop XP support */ type_len = (int)strlen(type); - if (type_len <1 || type_len > 2) { + if (type_len < 1 || type_len > 2) { return NULL; } - for (i=0; i < type_len; i++) { - if (!(*ptype == 'r' || *ptype == 'w' || *ptype == 'b' || *ptype == 't')) { - return NULL; - } - ptype++; + if (ptype[0] != 'r' && ptype[0] != 'w') { + return NULL; + } + + if (type_len > 1 && (ptype[1] != 'b' && ptype[1] != 't')) { + return NULL; } cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c ")+2); diff --git a/ext/standard/tests/file/popen_pclose_error-win32-debug.phpt b/ext/standard/tests/file/popen_pclose_error-win32-debug.phpt deleted file mode 100644 index f786021231..0000000000 --- a/ext/standard/tests/file/popen_pclose_error-win32-debug.phpt +++ /dev/null @@ -1,61 +0,0 @@ ---TEST-- -Test popen() and pclose function: error conditions ---SKIPIF-- -<?php -if(substr(PHP_OS, 0, 3) != 'WIN' && PHP_DEBUG) die("skip Valid only on Windows"); -if(!PHP_DEBUG) die("skip Not Valid for release builds"); - -ob_start();phpinfo(INFO_GENERAL);$inf=ob_get_contents(); ob_end_clean(); -if (!(strpos($inf, 'MSVC9') || strpos($inf, 'MSVC8'))) die("skip Not Valid for build done with VC < 8"); -?> ---FILE-- -<?php -/* - * Prototype: resource popen ( string command, string mode ) - * Description: Opens process file pointer. - - * Prototype: int pclose ( resource handle ); - * Description: Closes process file pointer. - */ -$file_path = dirname(__FILE__); -echo "*** Testing for error conditions ***\n"; -var_dump( popen() ); // Zero Arguments -var_dump( popen("abc.txt") ); // Single Argument -var_dump( popen("abc.txt", "rw") ); // Invalid mode Argument -var_dump( pclose() ); -$file_handle = fopen($file_path."/popen.tmp", "w"); -var_dump( pclose($file_handle, $file_handle) ); -pclose($file_handle); -var_dump( pclose(1) ); -echo "\n--- Done ---"; -?> ---CLEAN-- -<?php -$file_path = dirname(__FILE__); -unlink($file_path."/popen.tmp"); -?> ---EXPECTF-- -*** Testing for error conditions *** - -Warning: popen() expects exactly 2 parameters, 0 given in %s on line %d -NULL - -Warning: popen() expects exactly 2 parameters, 1 given in %s on line %d -NULL - -Warning: Invalid parameter detected in CRT function '_fdopen' (%s:%d) in %s on line %d - -Warning: popen(abc.txt,rw): Invalid argument in %s on line %d -bool(false) - -Warning: pclose() expects exactly 1 parameter, 0 given in %s on line %d -bool(false) - -Warning: pclose() expects exactly 1 parameter, 2 given in %s on line %d -bool(false) - -Warning: pclose() expects parameter 1 to be resource, int given in %s on line %d -bool(false) - ---- Done ---'abc.txt' is not recognized as an internal or external command, -operable program or batch file. diff --git a/ext/standard/tests/file/popen_pclose_error-win32.phpt b/ext/standard/tests/file/popen_pclose_error-win32.phpt deleted file mode 100644 index 0b29f9eefb..0000000000 --- a/ext/standard/tests/file/popen_pclose_error-win32.phpt +++ /dev/null @@ -1,57 +0,0 @@ ---TEST-- -Test popen() and pclose function: error conditions ---SKIPIF-- -<?php -if (substr(PHP_OS, 0, 3) != 'WIN') die("skip Valid only on Windows"); -if (PHP_DEBUG) die("skip Not Valid for debug builds"); -?> ---FILE-- -<?php -/* - * Prototype: resource popen ( string command, string mode ) - * Description: Opens process file pointer. - - * Prototype: int pclose ( resource handle ); - * Description: Closes process file pointer. - */ -$file_path = dirname(__FILE__); -echo "*** Testing for error conditions ***" . PHP_EOL; -var_dump( popen() ); // Zero Arguments -var_dump( popen("abc.txt") ); // Single Argument -var_dump( popen("abc.txt", "rw") ); // Invalid mode Argument -var_dump( pclose() ); -$file_handle = fopen($file_path."/popen.tmp", "w"); -var_dump( pclose($file_handle, $file_handle) ); -pclose($file_handle); -var_dump( pclose(1) ); -echo PHP_EOL . PHP_EOL . "--- Done ---"; -?> ---CLEAN-- -<?php -$file_path = dirname(__FILE__); -unlink($file_path."/popen.tmp"); -?> ---EXPECTF-- -*** Testing for error conditions *** - -Warning: popen() expects exactly 2 parameters, 0 given in %s on line %d -NULL - -Warning: popen() expects exactly 2 parameters, 1 given in %s on line %d -NULL - -Warning: popen(abc.txt,rw): Invalid argument in %s on line %d -bool(false) - -Warning: pclose() expects exactly 1 parameter, 0 given in %s on line %d -bool(false) - -Warning: pclose() expects exactly 1 parameter, 2 given in %s on line %d -bool(false) - -Warning: pclose() expects parameter 1 to be resource, int given in %s on line %d -bool(false) - - ---- Done ---'abc.txt' is not recognized as an internal or external command, -operable program or batch file. diff --git a/ext/standard/tests/file/popen_pclose_error.phpt b/ext/standard/tests/file/popen_pclose_error.phpt index 280e93427a..93ed5d946e 100644 --- a/ext/standard/tests/file/popen_pclose_error.phpt +++ b/ext/standard/tests/file/popen_pclose_error.phpt @@ -2,8 +2,8 @@ Test popen() and pclose function: error conditions --SKIPIF-- <?php -if(substr(PHP_OS, 0, 3) == 'WIN' || strtoupper( substr(PHP_OS, 0, 3) ) == 'SUN') - die("skip Not Valid for Windows & Sun Solaris"); +if (strtoupper( substr(PHP_OS, 0, 3) ) == 'SUN') + die("skip Not Valid for Sun Solaris"); ?> --FILE-- <?php |