EN JP CN

CWARN.SIGNEDBIT

CWARN.SIGNEDBIT

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

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

脆弱性とリスク

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

脆弱コード例

1  struct BITS {
2    int n:1;
3  };
4  
5  void foo() {
6    struct BITS b;
7    b.n = 1;
8    if (b.n > 0)    
9    {
10     ...
11   }
12 }

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