Вопрос о C ++ Stackwalker здесь: https://github.com/JochenKalmbach/StackWalker
#define _TRUNCATE ((size_t)-1)
enum
{
STACKWALK_MAX_NAMELEN = 1024
};
void StackWalker::OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUserName)
{
CHAR buffer[STACKWALK_MAX_NAMELEN];
size_t maxLen = STACKWALK_MAX_NAMELEN;
#if _MSC_VER >= 1400
maxLen = _TRUNCATE;
#endif
_snprintf_s(buffer, maxLen, "SymInit: Symbol-SearchPath: '%s', symOptions: %d, UserName: '%s'\n",
szSearchPath, symOptions, szUserName);
}
maxlen сначала устанавливается на 1024, а затем, если версия VC ++> = 1400 (что это), то он устанавливается на (без знака)-1, другими словами, по крайней мере, UINT_MAX.
Затем maxlen передается в _snprintf_s, поэтому он вызывает переполнение буфера, если строка больше 1024 символов.
Я что-то пропустилВот?Что могло послужить причиной установки maxlen на UINT_MAX?Использование функции безопасной строки, но без безопасности?