C and C++


LANG.STRUCT.ICOL : Inappropriate Call Outside Loop

Summary

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

Properties

Class Name Inappropriate Call Outside Loop
Significance security
Mnemonic LANG.STRUCT.ICOL
Categories
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
Availability Available for C and C++.
Enabling Checks for this warning class are enabled by default. To disable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += discard class="Inappropriate Call Outside Loop"

Example

#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);
}

Notes

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

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.