EN JP CN

ASSIGCOND.CALL

ASSIGCOND.CALL

割り当て条件付きステートメントの関数呼び出し

ASSIGCOND.CALL チェッカーは、代入式の右部分が関数呼び出しである条件付きステートメントを検出します。

脆弱性とリスク

このチェッカーは通常、構文エラーを検出します。これは一般的に、比較演算子の代わりに代入演算子を誤って使用した場合です。このエラーを修正しないと、意図しないプログラム動作が発生する可能性があります。

脆弱コード例

1  class A{
2     void foo(int);
3     int qq();
4  };
5  void A::foo(int i)
6  {
7    if(i=qq()){} 
8  }

このコード例では、Klocworkは、if ステートメントの代入式の右部分が関数呼び出しであると思われるため、7 行目にフラグを立てます。

修正コード例 1

1  class A{
2     void foo(int);
3     int qq();
4  };
5  void A::foo(int i)
6  {
7    if((i==qq()) {} 
8  }

この修正コードでは、代入演算子が意図した比較演算子に置換されました。

修正コード例 2

1  class A{
2     void foo(int);
3     int qq();
4  };
5  void A::foo(int i)
6  {
7    if((i=qq()) !=0) {} 
8  }

この修正コードでは、代入構文を区別するために、括弧を使用しています。

関連チェッカー