 
                            ...
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| 
int test (int x) {
  x--;
  if (x < 0 || x > 10) {
    return 0;
  }
  else {
    static int y = test(x);  //<--undefined behavior occurs here
    return y;
  }
}
 | 
...
In the GCC Version 4 compiler, upon reaching the initialization of y for the second time, the program will terminate with the following message:
| Code Block | 
|---|
| 
terminate called after throwing an instance of
'__gnu_cxx::recursive_init'
  what():  N9__gnu_cxx14recursive_initE
Aborted (core dumped)
 | 
...
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| 
int test (int x) {
  x--;
  if (x < 0 || x > 10) {
    return 0;
  }
  else {
    static int y;
    y = test(x);  
    return y;
  }
}
 | 
...
| Rule | Severity | Likelihood | Remediation Cost | Priority | Level | 
|---|---|---|---|---|---|
| DCL38-CPP | low | unlikely | medium | P2 | L3 | 
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
...