CERT.EXPR.PARENS
式内での演算子の優先順位は明示的にする必要があります。
脆弱性とリスク
優先順位の規則に関する誤りにより、式が意図しない方法で評価され、予期しない動作が発生する可能性があります。
軽減と防止
括弧を適切に使用して、防御的にエラーを減らします。
脆弱コード例
コピー
unsigned int test(unsigned int m, unsigned int n, unsigned int o)
{
unsigned int a;
a = m == n | o ? o : n;
o = m * n + a;
return o;
}
この非準拠の例では、Klocwork は 4 行目と 5 行目で CERT.EXPR.PARENS の欠陥を報告します。これは、優先順位を示すように、コードが演算子と共に括弧を使用していないためです。このコードにより、予期しない動作が発生する可能性があります。
修正コード例
コピー
unsigned int test(unsigned int m, unsigned int n, unsigned int o)
{
unsigned int a;
a = (m == n) | o ? o : n;
o = (m * n) + a;
return o;
}
上記の例は、優先順位を適切に示すために括弧を使用しているため、準拠の例となっています。
関連チェッカー
- MISRA.EXPR.PARENS.2012