Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1de0dc9

Browse files
committed
Python taint-tracking: Fix performance of pathalogically slow predicate.
1 parent b182abd commit 1de0dc9

1 file changed

Lines changed: 11 additions & 6 deletions

File tree

python/ql/src/semmle/python/security/TaintTracking.qll

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,17 +1209,22 @@ library module TaintFlowImplementation {
12091209
or
12101210
exists(string name | param = func.getParameterByName(name) and argument = func.getNamedArgumentForCall(call, name))
12111211
or
1212-
class_initializer_argument(_, _, call, func, argument, param)
1212+
class_initializer_argument(call, func, argument, param)
12131213
)
12141214
)
12151215
}
12161216

1217+
/* Helper for parameter_step */
12171218
pragma [noinline]
1218-
predicate class_initializer_argument(ClassValue cls, int n, CallNode call, CallableValue func, ControlFlowNode argument, NameNode param) {
1219-
call.getFunction().pointsTo(cls) and
1220-
cls.lookup("__init__") = func and
1221-
call.getArg(n) = argument and
1222-
param.getNode() = func.getScope().getArg(n+1)
1219+
private predicate class_initializer_argument(CallNode call, CallableValue func, ControlFlowNode argument, NameNode param) {
1220+
exists(ClassValue cls |
1221+
cls.getACall() = call and
1222+
cls.lookup("__init__") = func
1223+
) and
1224+
exists(int n |
1225+
call.getArg(n) = argument and
1226+
param.getNode() = func.getScope().getArg(n+1)
1227+
)
12231228
}
12241229

12251230
pragma [noinline]

0 commit comments

Comments
 (0)