EN JP CN

ABV.UNICODE.SELF_MAP

ABV.UNICODE.SELF_MAP

バッファ オーバーフロー - 失敗したマッピング関数で配列インデックスが範囲外

ABV.UNICODE.SELF_MAP は、MultiByteToWideChar マッピング関数と WideCharToMultiByte マッピング関数の失敗によって引き起こされるバッファオーバーラン状態をチェックします。通常、このチェッカーは、マッピング関数のソースポインターとターゲットポインターが同じである場合のエラー状態を検出します。

MultiByteToWideChar マッピング関数と WideCharToMultiByte マッピング関数の詳細については、MSDN の Web サイトを参照してください。

脆弱性とリスク

これらのマッピング関数を不適切に使用すると、バッファオーバーフローを引き起こしてアプリケーションのセキュリティが低下する可能性があります。この潜在的な状態を避けるには、バッファが受け取るデータ型に適したバッファサイズを指定することが重要です。

脆弱コード例

1  int
2  foo(void *src,  int size) {
3     WideCharToMultiByte(CP_ACP, 0, (wchar_t)src, -1, src, size, 0, 0);
4     MultiByteToWideChar(CP_ACP, 0, src, -1, src, 30);  
5  }

Klocwork は、この例の 3 行目と 4 行目の両方について、ソースポインターとターゲットポインターが同じではいけないことを指摘するメッセージを生成します。チェッカーは、WideCharToMultiByte マッピング関数と MultiByteToWideChar マッピング関数の失敗がバッファオーバーラン状態を引き起こしたと検出しました。

拡張機能

このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、C/C++ 解析のチューニングを参照してください。