記一次排查mbstowcs誤用引發的bug
阿新 • • 發佈:2019-01-28
問題程式碼如下:
#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驗證一下: