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

外部参考資料