ループ境界がハード コードされています
ループ境界がシンボリック定数でなく数値になっている
説明
この欠陥は、for
、while
、または do-while
ループの境界にシンボリック定数ではなく数値を使用した場合に発生します。
リスク
ループ境界がハード コードされていると、次の問題の原因となります。
ループ境界がハード コードされていると、時間のかかる計算やリソース割り当てがループに含まれている場合に、サービス拒否攻撃に対する脆弱性が生じる。
ループ境界がハード コードされていると、誤りが生じる可能性が大きくなり、保守コストが高くなる。ポリシーの変更によりループ境界の変更が必要になった場合、開発者はコードに境界が出現するたびに変更しなければならない。
たとえば、ループ境界が 10000 であり、ネットワーク サーバー アプリケーションでサポートされているクライアント接続数の最大値を表現しているとします。サーバーでサポートしているクライアント数がこれより多い場合、コード内のループ境界のインスタンスをすべて変更しなければなりません。ループ境界が 1 回しか発生しない場合でも、コード内の
10000
の数値に対して検索しなければなりません。この数値は、ループ境界以外の場所にも現れる可能性があります。こうした場所は、ループ境界を検索する前に参照しておかなければなりません。
修正方法
ループ境界に、ハード コードされている定数ではなくシンボリック名を使用します。シンボリック名には、const
修飾子付き変数、enum
定数またはマクロが含まれます。以下の理由により、enum
定数の使用が推奨されます。
マクロは前処理後に、その定数値によって置き換えられます。したがって、バッファー サイズが外部にさらされる場合があります。
enum
定数はコンパイルの時点で既知となっています。したがって、コンパイラではストレージをより効率的に割り当てられます。const
修飾子付き変数は、多くの場合、実行時に既知となります。
例
結果情報
グループ: 適切な手法 |
言語: C | C++ |
既定値: オフ |
コマンド ライン構文: HARD_CODED_LOOP_BOUNDARY |
影響度: Low |
バージョン履歴
R2015b で導入