...
Code Block | ||||
---|---|---|---|---|
| ||||
auto g() { int i = 12; return [&] { i = 100; return i; }; } void f() { int i = g()(); } |
Compliant Solution
In this compliant solution, the lambda does not capture i
by reference but instead captures it by copy. Consequently, the lambda contains an implicit nonstatic data member whose lifetime is that of the lambda.
Code Block | ||||
---|---|---|---|---|
| ||||
auto g() { int i = 12; return [=] () mutable { i = 100; return i; }; } void f() { int i = g()(); } |
Risk Assessment
Referencing an object outside of its lifetime can result in an attacker being able to run arbitrary code.
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
EXP61-CPP | High | Probable | High | P6 | L2 |
Automated Detection
Tool | Version | Checker | Description |
---|---|---|---|
|
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
Bibliography
[ISO/IEC 14882-2014] | Subclause 3.8, "Object Lifetime" Subclause 5.1.2, "Lambda Expressions" |
...