1. 程式人生 > >記一次排查mbstowcs誤用引發的bug

記一次排查mbstowcs誤用引發的bug

問題程式碼如下:

    #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驗證一下: