您的位置:首页 > 其它

记一次排查mbstowcs误用引发的bug

2014-04-22 19:03 169 查看
问题代码如下:

#define MAX_LINE_LEN       (10240*2)

char tieziLine[MAX_LINE_LEN];
wchar_t oneTieziLine_wchar[MAX_LINE_LEN];

mbstowcs(oneTieziLine_wchar,tieziLine,sizeof(oneTieziLine_wchar));


这段代码在别人机器上没有问题,到我机器上就core dump。

经过一番google之后,找到了答案:
http://www.cplusplus.com/reference/cstdlib/mbstowcs/ http://pentest.cryptocity.net/files/code_analysis/code_audits_2_fall2010.pdf‎
mbstowcs() takes a count of wide characters to write, not a size in bytes of the destination buffer

mbstowcs(oneTieziLine_wchar,tieziLine, sizeof(oneSample_wchar)); //这行代码有问题,我测试了一下,我机器上sizeof(wchar_t)为4。显然sizeof(oneTieziLine_wchar)大于tieziLine分配的大小。

为了验证结论,我找到了mbstowcs的实现:



同时gdb验证一下:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: