mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
python: instantiate module for variable capture
This provides variable capture in standard situations: - nested functions - lambdas There are some deficiencies: - we do not yet handle objects capturing variables. - we do not handle variables captured via the `nonlocal` keyword. This should be solved at the AST level, though, and then it should "just work". There are still inconsistencies in the case where a `SynthesizedCaptureNode` has a comprehensions as its enclosing callable. In this case, `TFunction(cn.getEnclosingCallable())` is not defined and so getEnclosingCallable does not exist for the `CaptureNode`.
This commit is contained in:
@@ -78,7 +78,7 @@ def through(tainted):
|
||||
global sinkT1
|
||||
sinkT1 = tainted
|
||||
captureOut1()
|
||||
SINK(sinkT1) #$ MISSING:captured
|
||||
SINK(sinkT1) #$ captured
|
||||
|
||||
def captureOut2():
|
||||
def m():
|
||||
@@ -86,7 +86,7 @@ def through(tainted):
|
||||
sinkT2 = tainted
|
||||
m()
|
||||
captureOut2()
|
||||
SINK(sinkT2) #$ MISSING:captured
|
||||
SINK(sinkT2) #$ captured
|
||||
|
||||
def captureOut1NotCalled():
|
||||
global nonSinkT1
|
||||
|
||||
Reference in New Issue
Block a user