forked from github/codeql
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMonkeyPatched.qll
More file actions
25 lines (24 loc) · 843 Bytes
/
MonkeyPatched.qll
File metadata and controls
25 lines (24 loc) · 843 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import python
private import LegacyPointsTo
predicate monkey_patched_builtin(string name) {
exists(AttrNode attr, SubscriptNode subscr, StringLiteral s |
subscr.isStore() and
subscr.getIndex().getNode() = s and
s.getText() = name and
subscr.getObject() = attr and
attr.getObject("__dict__").(ControlFlowNodeWithPointsTo).pointsTo(Module::builtinModule())
)
or
exists(CallNode call, ControlFlowNodeWithPointsTo bltn, StringLiteral s |
call.getArg(0) = bltn and
bltn.pointsTo(Module::builtinModule()) and
call.getArg(1).getNode() = s and
s.getText() = name and
call.getFunction().(ControlFlowNodeWithPointsTo).pointsTo(Value::named("setattr"))
)
or
exists(AttrNode attr |
attr.isStore() and
attr.getObject(name).(ControlFlowNodeWithPointsTo).pointsTo(Module::builtinModule())
)
}