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()
{
// ...
}
}
}