CXX.MALLOC.WCHAR_LENGTH

wchar_t バッファの場合、malloc でメモリを割り当てるときに (wsclen()+1*sizeof(wchar_t)) を使用します

ワイド文字とマルチバイト文字を含んでいた文字列の長さを、正しく計算する必要があります。

この規則の違反は、ワイド文字列またはマルチバイト文字列、文字列長関数の出力がメモリ割り当てサイズとして使用される場合に発生します。この結果は、文字列内の文字数になります。ただし、標準文字列では、ある文字はシングルバイトではない可能性があります。したがって、new または malloc に送信されたサイズによって返されたサイズを使用し、新しく割り当てられたメモリに文字列をコピーすると、バッファオーバーフローが発生します。これらの文字列を誤って使用してしまうもう 1 つのよくあるやり方は、ワイド文字列またはマルチバイト文字列を含む標準文字列を、単一の文字列に混在させることです。

軽減と防止

wchar_t バッファの場合、malloc でメモリを割り当てるときに (wsclen()+1*sizeof(wchar_t)) を使用します。

脆弱コード例

コピー
    wchar_t * pw_bad = (wchar_t*) malloc(wsclen(sourceString) * sizeof(wchar_t));
    wchar_t * pw_good = (wchar_t *) malloc((wsclen(sourceString) + 1) * sizeof(wchar_t));

必要なバッファに対して、上記の pw_bad への割り当ては正しくない計算を使用しています。"+1" が欠けています。