Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
bgColor#FFcccc
#include <stdio.h>
#include <stdlib.h>

#define exitearly 1

void exit1(void) {
  puts("Exit second.\n");
}

void exit2 (void) {
  puts("Exit first.\n");
  if (exitearly) {
     exit(1);
  }
}

int main (void) {

  if (expr) {
    atexit (exit1);
    atexit (exit2);
    puts("In main\n");
  exit(1);
exit(1);
  }
  else {
    exit2();
  }

  return 0;
}

Compliant Code

...

Code Block
bgColor#ccccFF
#include <stdio.h>
#include <stdlib.h>

#define exitearly 1

void exit1(void)
{
  printf("Exit second.\n");

}

void exit2 (void)
{
  printf("Exit first.\n");
  if (exitearly)
  {
     _exit(1);
  }
}

int main (void) {

  if (expr) {
    atexit (exit1);
    atexit (exit2);
    printf("In main\n"exit(1);
   exit(1}
  else {
    exit2();
  }

  return 0;
}

All functions registered by the atexit() function are called, in the reverse order of their registration.

Risk Assessment

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

MSC31-C

1 (low)

1 (unlikely)

3(low)

P6

L2

...