ASSIGCOND.CALL

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

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

脆弱性とリスク

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

脆弱コード例

コピー
  class A{
     void foo(int);
     int qq();
  };
  void A::foo(int i)
  {
    if(i=qq()){} 
  }

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

修正コード例 1

コピー
  class A{
     void foo(int);
     int qq();
  };
  void A::foo(int i)
  {
    if((i==qq()) {} 
  }

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

修正コード例 2

コピー
  class A{
     void foo(int);
     int qq();
  };
  void A::foo(int i)
  {
    if((i=qq()) !=0) {} 
  }

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

関連チェッカー

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。