- MFB: #41874, separate STDOUT and STDERR in exec functions

This commit is contained in:
Pierre Joye 2009-06-09 14:07:06 +00:00
parent a9d85b668c
commit 251b711eac
5 changed files with 80 additions and 3 deletions

View file

@ -444,6 +444,7 @@ PHP_FUNCTION(proc_open)
STARTUPINFO si; STARTUPINFO si;
BOOL newprocok; BOOL newprocok;
SECURITY_ATTRIBUTES security; SECURITY_ATTRIBUTES security;
DWORD dwCreateFlags = 0;
char *command_with_cmd; char *command_with_cmd;
UINT old_error_mode; UINT old_error_mode;
#endif #endif
@ -742,12 +743,17 @@ PHP_FUNCTION(proc_open)
old_error_mode = SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX); old_error_mode = SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX);
} }
dwCreateFlags = NORMAL_PRIORITY_CLASS;
if(strcmp(sapi_module.name, "cli") != 0) {
dwCreateFlags |= CREATE_NO_WINDOW;
}
if (bypass_shell) { if (bypass_shell) {
newprocok = CreateProcess(NULL, command, &security, &security, TRUE, NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW, env.envp, cwd, &si, &pi); newprocok = CreateProcess(NULL, command, &security, &security, TRUE, dwCreateFlags, env.envp, cwd, &si, &pi);
} else { } else {
spprintf(&command_with_cmd, 0, "%s /c %s", GetVersion() < 0x80000000 ? COMSPEC_NT : COMSPEC_9X, command); spprintf(&command_with_cmd, 0, "%s /c %s", GetVersion() < 0x80000000 ? COMSPEC_NT : COMSPEC_9X, command);
newprocok = CreateProcess(NULL, command_with_cmd, &security, &security, TRUE, NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW, env.envp, cwd, &si, &pi); newprocok = CreateProcess(NULL, command_with_cmd, &security, &security, TRUE, dwCreateFlags, env.envp, cwd, &si, &pi);
efree(command_with_cmd); efree(command_with_cmd);
} }

View file

@ -0,0 +1,22 @@
--TEST--
bug #41874 (Separate STDOUT and STDERR in exec functions)
--CREDITS--
Venkat Raman Don
--SKIPIF--
<?php
if(substr(PHP_OS, 0, 3) != 'WIN' ) {
die('skip windows only test');
}
?>
--FILE--
<?php
$result = exec('cd 1:\\non_existant; dir nonexistant');
echo "$result";
system('cd 1:\\non_existant; dir nonexistant');
$result = shell_exec('cd 1:\\non_existant; dir nonexistant');
echo $result;
?>
--EXPECT--
The system cannot find the drive specified.
The system cannot find the drive specified.
The system cannot find the drive specified.

View file

@ -0,0 +1,16 @@
--TEST--
bug #41874 (Separate STDOUT and STDERR in exec functions)
--CREDITS--
Venkat Raman Don
--SKIPIF--
<?php
if(substr(PHP_OS, 0, 3) != 'WIN' ) {
die('skip windows only test');
}
?>
--FILE--
<?php
popen("1:\\non_existent", "r");
?>
--EXPECT--
The system cannot find the drive specified.

View file

@ -0,0 +1,17 @@
--TEST--
bug #41874 (Separate STDOUT and STDERR in exec functions)
--CREDITS--
Venkat Raman Don
--SKIPIF--
<?php
if(substr(PHP_OS, 0, 3) != 'WIN' ) {
die('skip windows only test');
}
?>
--FILE--
<?php
$result = exec('cd 1:\\non_existant; dir nonexistant');
echo "$result";
?>
--EXPECT--
The system cannot find the drive specified.

View file

@ -0,0 +1,16 @@
--TEST--
bug #41874 (Separate STDOUT and STDERR in exec functions)
--CREDITS--
Venkat Raman Don
--SKIPIF--
<?php
if(substr(PHP_OS, 0, 3) != 'WIN' ) {
die('skip windows only test');
}
?>
--FILE--
<?php
system('cd 1:\\non_existant; dir nonexistant');
?>
--EXPECT--
The system cannot find the drive specified.