EN JP CN

STRONG.TYPE.JOIN.OTHER

STRONG.TYPE.JOIN.OTHER

算術演算子を持つ別の強い型の組み合わせ

チェッカーの STRONG.TYPE ファミリーは、プログラマーが行う強い型指定 (型が定義された抽象型) が違反または無視され、基礎となる ANSI 型セマンティックスが優先される状況を検出します。

STRONG.TYPE.JOIN.OTHER チェッカーは、2 つの強い型指定の値がバイナリ演算子を使用して比較されているインスタンスを検出します。この規則では、バイナリ演算子は、次のいずれかとして定義されます。

  • 5 つの算術演算子 (+ - * / %)
  • 3 つのビット演算子 (| & ^)

脆弱性とリスク

ANSI 規格対応のコンパイラは、表面の (プログラマーが定義する) 型ではなく、基底型をチェックするだけであるため、このような指摘に関する警告を報告しません。この結果、論理エラーが発生する可能性があります。

脆弱コード例

1 typedef int Count;
2 typedef int Weight;
3
4 int main() {
5   Weight w, w1;
6   Count c;
7   w1 = w + c ; 
8   return 0;
9 }

Klocwork 異なる強い型の値 w および c が + 演算子を使用して結合されていることを示す 7 行目にフラグを立てます。