Skip to content

Commit 163bfc4

Browse files
committed
python: replace points-to with API graph
- values are identified via `API::builtin` - `points-to` is approximated by `getAValueReachableFromSource`
1 parent 2223bc3 commit 163bfc4

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

python/ql/src/Exceptions/UnguardedNextInGenerator.ql

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,22 @@
1111
*/
1212

1313
import python
14+
private import semmle.python.ApiGraphs
1415

15-
FunctionValue iter() { result = Value::named("iter") }
16+
API::Node iter() { result = API::builtin("iter") }
1617

17-
BuiltinFunctionValue next() { result = Value::named("next") }
18+
API::Node next() { result = API::builtin("next") }
19+
20+
API::Node stopIteration() { result = API::builtin("StopIteration") }
1821

1922
predicate call_to_iter(CallNode call, EssaVariable sequence) {
20-
sequence.getAUse() = iter().getArgumentForCall(call, 0)
23+
call = iter().getACall().asCfgNode() and
24+
call.getArg(0) = sequence.getAUse()
2125
}
2226

2327
predicate call_to_next(CallNode call, ControlFlowNode iter) {
24-
iter = next().getArgumentForCall(call, 0)
28+
call = next().getACall().asCfgNode() and
29+
call.getArg(0) = iter
2530
}
2631

2732
predicate call_to_next_has_default(CallNode call) {
@@ -47,7 +52,7 @@ predicate iter_not_exhausted(EssaVariable iterator) {
4752
predicate stop_iteration_handled(CallNode call) {
4853
exists(Try t |
4954
t.containsInScope(call.getNode()) and
50-
t.getAHandler().getType().pointsTo(ClassValue::stopIteration())
55+
t.getAHandler().getType() = stopIteration().getAValueReachableFromSource().asExpr()
5156
)
5257
}
5358

0 commit comments

Comments
 (0)