mirror of
https://github.com/php/php-src.git
synced 2025-08-19 08:49:28 +02:00
- MFB: #41874, separate STDOUT and STDERR in exec functions
This commit is contained in:
parent
a9d85b668c
commit
251b711eac
5 changed files with 80 additions and 3 deletions
|
@ -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,13 +743,18 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
ext/standard/tests/file/bug41874.phpt
Normal file
22
ext/standard/tests/file/bug41874.phpt
Normal 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.
|
16
ext/standard/tests/file/bug41874_1.phpt
Normal file
16
ext/standard/tests/file/bug41874_1.phpt
Normal 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.
|
17
ext/standard/tests/file/bug41874_2.phpt
Normal file
17
ext/standard/tests/file/bug41874_2.phpt
Normal 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.
|
16
ext/standard/tests/file/bug41874_3.phpt
Normal file
16
ext/standard/tests/file/bug41874_3.phpt
Normal 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.
|
Loading…
Add table
Add a link
Reference in a new issue