C and C++


LANG.STRUCT.LOOP.UB : 潜在的な無限ループ

要旨

ループが固定の境界を持ちません(詳しくは以下の注釈を参照してください)。

プロパティ

クラス名 Potential Unbounded Loop
日本語クラス名 潜在的な無限ループ
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.LOOP.UB
カテゴリー
AUTOSARC++14 AUTOSARC++14:A6-5-2 A for loop shall contain a single loop-counter which shall not have floating-point type.
CWE CWE:400 Uncontrolled Resource Consumption
  CWE:835 Loop with Unreachable Exit Condition ('Infinite Loop')
CERT-C CERT-C:MSC21-C Use robust loop termination conditions
POW10 POW10:2 Give all loops a fixed upper-bound.
JPL JPL:3 Use verifiable loop bounds for all loops meant to be terminating.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Potential Unbounded Loop"

#include <stdlib.h>

void lang_struct_loop_ub (void){
    int i = 0;
    while (rand()) { /* 'Potential Unbounded Loop' warning issued here */
      if (i++ == 10) {break;}
    }
}

注釈

ループカウンタが更新され、ループ回数の上限が保証されていることを確認できない場合、潜在的な無限ループワーニングを検出します。 これは以下の全ての条件が満たされていることを意味します。

{<, <=, >, >=} に含まれるループ条件にてテストされる値の変数は、ループカウンタ候補と呼ばれます。 ループカウンタ候補は存在するが、全ての要求条件を満たすものが存在しない場合、 CodeSonar は境界の証明に適切でないという理由と共にそれらの候補をレポートします。

無限ループワーニングの検出を抑制する場合は設定ファイルパラメータの NON_TERMINATING_LOOP_MARK を使用し、 for(;;){...}while(1){...} の様な構文で定義します。 もしくはこのチェックを除外するため、特殊なコメントを定義する場合にも有効です。

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。