Index: base/process/launch_win.cc |
diff --git a/base/process/launch_win.cc b/base/process/launch_win.cc |
index 1349b3e4af3d101d4515e04d5ae081195e73016a..97b59a5bfe45f5cf9d4b779446b46bd43795ba53 100644 |
--- a/base/process/launch_win.cc |
+++ b/base/process/launch_win.cc |
@@ -142,7 +142,14 @@ void RouteStdioToConsole(bool create_console_if_not_found) { |
// _fileno(stdout) will return -2 (_NO_CONSOLE_FILENO) if stdout was |
// invalid. |
if (_fileno(stdout) >= 0 || _fileno(stderr) >= 0) { |
- return; |
+ // _fileno was broken for SUBSYSTEM:WINDOWS from VS2010 to VS2012/2013. |
+ // http://crbug.com/358267. Confirm that the underlying HANDLE is valid |
+ // before aborting. |
+ |
+ intptr_t stdout_handle = _get_osfhandle(_fileno(stdout)); |
+ intptr_t stderr_handle = _get_osfhandle(_fileno(stderr)); |
+ if (stdout_handle >= 0 || stderr_handle >= 0) |
+ return; |
} |
if (!AttachConsole(ATTACH_PARENT_PROCESS)) { |