执行wcscpy_s时WCHAR溢出
WCHAR overflow when performing wcscpy_s
当试图从outlook邮箱中检索一个巨大的文件夹路径(路径中没有255个字符的最大长度(时,我似乎没有正确处理它,但我已经尝试了代码中的所有内容,似乎没有什么能解决这个问题。
Path: \Mailbox - longInboxfgsegesgrgesrgegthtrhrthyerytyertytthgfhgdfhdfhsfhsjkdfhsjkhfweuifhskjefhjksdhjsdhfusehfklahdfajkehwfuasdfsadfhjaehjfhaeufhuaseh9oa3heufhshudhjksahdfjkshadmldhasnfawefuyawefioaw3yfiuapgpapwqq0uwqfeiusdfsgpsadncabpawiawehfiowaeghuiaegfwuioaghpaweufrhasdfhlkasvjdhlaehfuawieghgawgwaeffasbclajsbvbwaubhvwabveuabvdjklzbdvjkhzusefhzlhsdfvshiuwhpqphdfhvjsamhashmasdfvhnakjdsfiawjeijfvsadkjfsaaefrghjksadfhjklshareuhsadhsahvsandvnlsdffalsdfh384fhsduafhlfasfdlashjklefrhuaehfskhaahsdfhuhaiyeifoa38fodasfhsahdfklkkasdfjkfhsakdfjhsjkladfhdsjkahfjkajkflashdfjkshafjksahfsdjafhsdjahfjsahldfkasffauiwehfeawhfjkhsakjfhsjkaefheuifhjksdhjkafhjksadhfjhaseuhfasjhdjkfhasfjhaskjdfhslafjklshadjkfhasjkhfjkaheuyhruiyq3y83yuryvnzxcvxzcviouxzcvzxvklzxvkl
Path Length: 766 to 812 char
希望能更好地解释一下代码;
if(....)
{
size_t n = wcslen(outlookFolderPath->Value.lpszW);
if(n < 100)
wcscpy_s(m_szInheritedFolderPath, outlookFolderPath->Value.lpszW);
else
{
WCHAR szTemp[2048] = {}, szText[2048]= {};
LoadStringW(ghInstDLL, IDS_PATH_TRUNCATED, szText, 2048);
swprintf_s(szTemp, szText, outlookFolderPath->Value.lpszW + ((n-80) * sizeof(WCHAR)));
wcscpy_s(m_szInheritedFolderPath, szTemp); // *** Dies Here ***
}
}
...
致命错误发生在string.h
行;
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, wcscpy_s, wchar_t, _Dest, _In_z_ const wchar_t *, _Source)
(n-80) * sizeof(WCHAR).
它在一个100个字符长的数组中复制160个字符。卡博姆。
您要计算的是字符数,而不是字节数。删除* sizeof(WCHAR)
。你应该找个代孕者。
swprintf_s(szTemp, szText, outlookFolderPath->Value.lpszW + ((n-80) * sizeof(WCHAR)));
这里的第二个参数应该是缓冲区的大小。
相关文章:
- 'short int'持有的值溢出,但"自动"不会溢出?
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 大于65535的C++数组[size]引发不一致的溢出
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- C++中无符号字符溢出
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 整数溢出,最大值为 pow(10,19)
- 获取隐式转换溢出从无符号到已签名的警告
- 使用 strcat 获取缓冲区溢出错误
- LeetCode 1:两和 - 地址清理器:堆缓冲区溢出地址
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- C++ 对象数组堆栈溢出
- 使用提升::lexical_cast捕获溢出
- C++ Unordered_set功能中的溢出
- 自定义排序函数中的堆溢出
- 'const char*'和'WCHAR*'
- 执行wcscpy_s时WCHAR溢出