C and C++


LANG.STRUCT.ICOL : Inappropriate Call Outside Loop

要旨

A function that should only be called from inside a loop is called outside a loop.

プロパティ

クラス名 Inappropriate Call Outside Loop
日本語クラス名 Inappropriate Call Outside Loop
クラス分類 セキュリティ (security)
ニーモニック LANG.STRUCT.ICOL
カテゴリー
CERT-C CERT-C:CON36-C Wrap functions that can spuriously wake up in a loop
  CERT-C:CON41-C Wrap functions that can fail spuriously in a loop
CERT-CPP CERT-CPP:CON54-CPP Wrap functions that can spuriously wake up in a loop
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで有効になっています。チェックを無効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += discard class="Inappropriate Call Outside Loop"

#include <pthread.h>

unsigned int test;

void wait_inside_loop(pthread_cond_t cond, pthread_mutex_t lock){
    pthread_mutex_lock(&lock);
    while (test == 0)
        pthread_cond_wait(&cond, &lock);                       /* ok: call is inside a loop */
    test = 0;
    pthread_mutex_unlock(&lock);
}

void wait_outside_loop(pthread_cond_t cond, pthread_mutex_t lock){
    pthread_mutex_lock(&lock);
    pthread_cond_wait(&cond, &lock);  /* 'Inappropriate Call Outside Loop' warning issued here */
    test=1;
    pthread_mutex_unlock(&lock);
}

注釈

The functions whose calls are checked for this warning class are specified with configuration parameter LOOP_ONLY_FUNCS

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

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