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 が提供しているアプリケーションセキュリティトレーニング教材。