Closed mingkuang-Chuyu closed 1 year ago
Windows XP模式
_wputenv_s
临时改用_wputenv,同时新版本5.0.7将修复此问题。
_wputenv
5.0.7
// 在老版本VC-LTL中 不要使用_wputenv_s,下面是等效的替换。 // _wputenv_s(L"Name", L""); _wputenv(L"Name=");
int main() { // 可观察到 返回值为 22,而非预期的 0。 // 崩溃它不一定发生,除非开启ASAN。 _wputenv_s(L"123", L""); return 0; }
_wputenv内部为字符串分配缓冲区时,没有正确的 * sizeof(wchar_t),导致实际分配的缓冲区长度小于预期。从而发生越界访问。 具体代码点:https://github.com/Chuyu-Team/VC-LTL5/blob/v5.0.6/ucrtbase.msvcrt/putenv.cpp#L43
* sizeof(wchar_t)
修正缓冲区长度,重新确认所有 * sizeof 位点有无异常。静态代码分析???
* sizeof
最终修复版本。 https://github.com/Chuyu-Team/VC-LTL5/releases/tag/v5.0.7
1. 基本信息
Windows XP模式
且使用到_wputenv_s
的代码将受到影响,其他模式不受到影响。1.1. 临时规避方案
临时改用
_wputenv
,同时新版本5.0.7
将修复此问题。1.2. 最小复现代码
2. 问题原因
_wputenv内部为字符串分配缓冲区时,没有正确的
* sizeof(wchar_t)
,导致实际分配的缓冲区长度小于预期。从而发生越界访问。 具体代码点:https://github.com/Chuyu-Team/VC-LTL5/blob/v5.0.6/ucrtbase.msvcrt/putenv.cpp#L433. 问题修复
修正缓冲区长度,重新确认所有
* sizeof
位点有无异常。静态代码分析???