CS.STMT.CONTROL.EMPTY

ボディが空である制御ステートメントを避けます。

この規則は、ボディが空である "if"、"for"、"while"、"do while"、"else"、および "switch" のステートメントを識別します。エラーは発生ごとに報告されます。

軽減と防止

終了ステートメント (セミコロンなど) が直後に続く条件ステートメントは、通常はタイプミスです。この規則に従うことで、検出が困難なバグがコードベースに入ることを防ぎます。ボディが空のステートメントをしばしば引き起こす別の状況は、開発者が条件の処理を先送りするように決定し、リリース前にそれに戻って作業するのを忘れてしまう場合です。これにより、セキュリティホールを引き起こす可能性さえある、重要な条件を処理し忘れる可能性があります。

脆弱コード例

コピー
  using System;
  namespace PB.EB
  {
      public class EB
      {
          void method (int i)
          {
              if (i < 0) ; // VIOLATION
              Console.WriteLine("negative i"); // This always gets printed
         }
         public static void Main()
         {
             // ...
         }
     }
 }
 // The 'WriteLine()' statement will always be executed regardless
 // of the value of 'i'.

修正コード例

コピー
  // Remove the unnecessary semicolon.
  using System;
  namespace PB.EB
  {
      public class EB
      {
          void method (int i)
          {
              if (i < 0) // FIXED
             {
                 Console.WriteLine("negative i");
             }
         }
         public static void Main()
         {
             // ...
         }
     }
 }