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

Ian Boyd picture Ian Boyd · Nov 18, 2009 · Viewed 16.1k times · Source

i, and a few thousand other people, are getting an error being thrown by the Microsoft Visual C++ Runtime:

alt text

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.

Answer

Daniel A. White picture Daniel A. White · Nov 18, 2009

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.