Re: [msysGit] [PATCH 1/2] MSVC: Do not close stdout to prevent a crash
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- Nov 19, 2011, 20:11 UTC
- Message-ID
- <4EC80D84.2010202@kdbg.org>
- In-Reply-To
- <1321710345-2299-1-git-send-email-vfr@lyx.org>
Am 19.11.2011 14:45, schrieb Vincent van Ravesteijn:
Show 5 quoted lines
> When compiled with MSVC, git crashes on Windows when calling > fstat(stdout) when stdout is closed. fstat is being called at the end of > run_builtin and this will thus be a problem for builtin command that close > stdout. This happens for 'format-patch' which closes stdout after a call to > freopen which directs stdout to the format patch file.
This crash happens because of the some drainbramage in the MS's newer C runtime: Its functions never return EINVAL (like fstat should in this case), but it is assumed that cases where EINVAL should be returned are programming errors, and the application is redirected, via an "invalid agument handler" to abort() instead. (It is advertized as a security feature.)
> To prevent the crash and to prevent git from writing cruft into the patch > file, we do not close stdout, but redirect it to "nul" instead.
A more robust solution is to add invalidcontinue.obj to the linker command line. This installs an invalid argument handler that does not abort, and restores a sane behavior.
-- Hannes