Module: wine Branch: master Commit: 0e3edfd9422b811bc9b4c90110133fa342ae204e URL: https://source.winehq.org/git/wine.git/?a=commit;h=0e3edfd9422b811bc9b4c9011...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Sep 24 17:26:58 2020 +0200
kernelbase: Duplicate input and output handles to ensure that they are inheritable.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernelbase/console.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c index ce041020a3..502fbcddaf 100644 --- a/dlls/kernelbase/console.c +++ b/dlls/kernelbase/console.c @@ -1732,6 +1732,7 @@ HRESULT WINAPI CreatePseudoConsole( COORD size, HANDLE input, HANDLE output, DWO { SECURITY_ATTRIBUTES inherit_attr = { sizeof(inherit_attr), NULL, TRUE }; struct pseudo_console *pseudo_console; + HANDLE tty_input = NULL, tty_output; HANDLE signal = NULL; WCHAR pipe_name[64];
@@ -1751,9 +1752,15 @@ HRESULT WINAPI CreatePseudoConsole( COORD size, HANDLE input, HANDLE output, DWO return HRESULT_FROM_WIN32( GetLastError() ); } pseudo_console->signal = CreateFileW( pipe_name, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); - if (pseudo_console->signal != INVALID_HANDLE_VALUE) - pseudo_console->reference = create_pseudo_console( size, input, output, signal, flags, + if (pseudo_console->signal != INVALID_HANDLE_VALUE && + DuplicateHandle( GetCurrentProcess(), input, GetCurrentProcess(), &tty_input, 0, TRUE, DUPLICATE_SAME_ACCESS) && + DuplicateHandle( GetCurrentProcess(), output, GetCurrentProcess(), &tty_output, 0, TRUE, DUPLICATE_SAME_ACCESS)) + { + pseudo_console->reference = create_pseudo_console( size, tty_input, tty_output, signal, flags, &pseudo_console->process ); + NtClose( tty_output ); + } + NtClose( tty_input ); NtClose( signal ); if (!pseudo_console->reference) {