Skip to content

Commit c0e1df4

Browse files
authored
Merge pull request github#5431 from MathiasVP/av-rule-79-use-gvn
C++: Use GVN in AV Rule 79
2 parents 3b34bfd + 2abf4c0 commit c0e1df4

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
lgtm,codescanning
2+
* The 'Resource not released in destructor' (cpp/resource-not-released-in-destructor) query has been improved to recognize more releases of resources.

cpp/ql/src/jsf/4.10 Classes/AV Rule 79.ql

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import cpp
1515
import Critical.NewDelete
16+
import semmle.code.cpp.valuenumbering.GlobalValueNumbering
1617

1718
/**
1819
* An expression that acquires a resource, and the kind of resource that is acquired. The
@@ -98,7 +99,8 @@ private predicate exprReleases(Expr e, Expr released, string kind) {
9899
e.(FunctionCall).getTarget().(MemberFunction).getAnOverridingFunction+() = f
99100
) and
100101
e.(FunctionCall).getArgument(arg) = released and
101-
exprReleases(_, exprOrDereference(f.getParameter(arg).getAnAccess()), kind)
102+
exprReleases(_,
103+
exprOrDereference(globalValueNumber(f.getParameter(arg).getAnAccess()).getAnExpr()), kind)
102104
)
103105
or
104106
exists(Function f, ThisExpr innerThis |
@@ -110,7 +112,7 @@ private predicate exprReleases(Expr e, Expr released, string kind) {
110112
) and
111113
e.(FunctionCall).getQualifier() = exprOrDereference(released) and
112114
innerThis.getEnclosingFunction() = f and
113-
exprReleases(_, innerThis, kind)
115+
exprReleases(_, globalValueNumber(innerThis).getAnExpr(), kind)
114116
)
115117
}
116118

0 commit comments

Comments
 (0)