How to disable buffer overflow checking in the Visual C++ Runtime?

buffer-overflow, compatibility, msvcrt, windows

Solution

There is an option here. Set it to no.

Project Properties -> Configuration Properties -> C/C++ -> Code Generation -> Buffer Security Check.

This corresponds to the /GS (Buffer Security Check) compiler option:

Detects some buffer overruns that overwrite the return address, a common technique for exploiting code that does not enforce buffer size restrictions. This is achieved by injecting security checks into the compiled code.

Problem

i, and a few thousand other people, are getting an error being thrown by the Microsoft Visual C++ Runtime: Which for the benefit of search engines, says: ``` Microsoft Visual C++ Runtime Library Buffer overrun detected! Program: %s A buffer overrun has been detected which has corrupted the program's internal state. The program cannot safely continue execution and must now be terminated. ``` Now i understand what a buffer overrun is, and why it is a bad thing. Given Microsoft's new emphasis on "it's just broken", the extra buffer checks in MSVCRT can be a nice thing. On the other hand, i don't care. It's not that the program can't continue, it's that the program cannot safely continue. Well i'd rather be unsafe, because it's better than nothing. i enjoy living dangerously. So can anyone suggest anything? i was thinking things like: - a registry key to prevent MSVCRT from halting execution - running the application in compability with a previous operating system (previous to Windows 7) - adding an assembly manifest to the executable folder so that it uses an older version of the MSVCRT, one which doesn't perform this overflow checking - a version number, or download location, of a copy of MSVCRT that doesn't have the overflow checking i tried searching the support site of the company that wrote the Microsoft Visual C++ Runtime Library, but they have no mention of which functions could be overflowing, or how to disable overflow checking.

Original source