BSTR.OPS.ARITHM

BSTR 値を使用した不正確な算術演算

BSTR.OPS.ARITHM チェッカーは、BSTR エンティティを持つアドレス演算のインスタンスを検出します。BSTR 値にこれらの演算を使用すると、不正なメモリ使用につながる可能性があります。

脆弱性とリスク

2 つのスタイルの構造が異なるため、COM スタイルの BSTR 文字列と、C スタイルの文字列との間の変換には注意が必要です。場合によっては、2 つの間の変換はうまくコンパイルされるものの、予期しない結果を引き起こすことがあります。

軽減と防止

C スタイルの文字列と異なり、BSTR 文字列には、続くデータ文字列にバイト数を含む、4 バイトの長さの接頭辞が含まれます。BSTR 文字列は、組み込み null 文字を含むこともでき、強く型指定されません。このため、新しい設計では BSTR を使用しないことが最適です。

脆弱コード例

コピー
  void bstr_arithm() {
       BSTR foo = SysAllocString(L"abc");
       foo++; 
  }

Klocwork は、算術演算が BSTR 値で試行された 3 行目にフラグを立てます。

関連チェッカー