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 行目にフラグを立てます。