CWARN.SIGNEDBIT

符号付きビットフィールドのビット数がわずか 1 です

CWARN.SIGNEDBIT チェッカーは、符号付きビットフィールドのビット数がわずか 1 であるインスタンスを検出します。

脆弱性とリスク

符号付きビットフィールドには最低 2 ビット必要で、フィールドの取り得る 2 つの値は -1 と0 です。ブール値のフラグとして使用するなどして、1 ビットの符号付きビットフィールドが 0 かどうかをチェックすることは安全ですが、その他の算術演算子の場合は、予期しない結果になる可能性があります。

脆弱コード例

コピー
  struct BITS {
    int n:1;
  };
  
  void foo() {
    struct BITS b;
    b.n = 1;
    if (b.n > 0)    
    {
     ...
   }
 }

Klocwork は、1 ビットの符号付きビットフィールドが定義されている 2 行目にフラグを立てます。