CERT.DCL.SWITCH.VAR_BEFORE_CASE

switch ステートメント内では最初の case ラベルの前で変数を宣言しないでください。

脆弱性とリスク

switch ブロックの最初の case ステートメントの前でテスト条件を使用したり、変数を初期化したりすると、予期しない動作や定義されていない動作が発生する可能性があります。

脆弱コード例

extern void f(int i);

void func(int expr) {
    switch (expr) {
        int i = 4;
        f(i);
    case 0: 
        i = 17;
        /* デフォルトのコードにフォールスルーします */
    default: 
        printf("%d\n", i);
    }
}

この非準拠コード例では、switch ステートメント内の最初の case ラベルの前に変数が宣言され、実行可能ステートメントが記述されています。