You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Next »

The C Language facilities setjmp() and longjmp() can be used as a poor attempt to simulate the throwing and catching of exceptions, but they are very low-level facilities, and using them can bypass proper resource management and the proper calling of destructors.

The C++ Standard ISO/IEC 14882-2003, section 18.7 paragraph 4. says:

The function signature longjmp(jmp_buf jbuf, int val) has more restricted behavior in this International Standard. A setjmp/longjmp call pair has undefined behavior if replacing the setjmp and longjmp by catch and throw would destroy any automatic objects.

Non-Compliant Code Example

Compliant Solution

Risk Assessment

Using setjmp() and longjmp() could lead to a denial-of-service attack.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

RES39-C

1 (low)

2 (probable)

2 (medium)

P4

L3

References

[[ISO/IEC 14882-2003]] Section 18.7
[[Henricson 97]] Rule 13.3 Do not use setjmp() and longjmp().


MSC16-CPP. Consider encrypting function pointers      49. Miscellaneous (MSC)      MSC18-CPP. Finish every set of statements associated with a case label with a break statement

  • No labels