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

Skip to content

Commit 2d3e23e

Browse files
committed
Python: Cleanup, docs, and an extra test case
1 parent 7cdd290 commit 2d3e23e

3 files changed

Lines changed: 11 additions & 4 deletions

File tree

python/ql/src/experimental/dataflow/internal/DataFlowPrivate.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ class DataFlowClassValue extends DataFlowCallable, TClassValue {
240240
override string getName() { result = c.getName() }
241241
}
242242

243+
/** A class representing the scope in which a `ModuleVariableNode` appears. */
243244
class DataFlowModuleScope extends DataFlowCallable, TModule {
244245
Module mod;
245246

python/ql/src/experimental/dataflow/internal/DataFlowPublic.qll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ class ParameterNode extends EssaNode {
150150
override DataFlowCallable getEnclosingCallable() { this.isParameterOf(result, _) }
151151
}
152152

153+
/** A data flow node corresponding to a module-level (global) variable that is accessed outside of the module scope. */
153154
class ModuleVariableNode extends Node, TModuleVariableNode {
154155
Module mod;
155156
GlobalVariable var;
@@ -176,10 +177,8 @@ class ModuleVariableNode extends Node, TModuleVariableNode {
176177
}
177178

178179
/** Gets an `EssaNode` that corresponds to an assignment of this global variable. */
179-
Node getAWrite() {
180-
exists(DefinitionNode defn |
181-
result.asVar().getDefinition().(EssaNodeDefinition).definedBy(var, defn)
182-
)
180+
EssaNode getAWrite() {
181+
result.asVar().getDefinition().(EssaNodeDefinition).definedBy(var, any(DefinitionNode defn))
183182
}
184183

185184
override DataFlowCallable getEnclosingCallable() { result.(DataFlowModuleScope).getScope() = mod }

python/ql/test/experimental/dataflow/global-flow/test.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@
3737
else:
3838
g_mult = [300] # $writes=g_mult
3939

40+
# Potential reassignment
41+
42+
g_mult2 = [400] # $writes=g_mult2
43+
if unknown_module.attr:
44+
g_mult2 = [500] # $writes=g_mult2
45+
4046
def global_access():
4147
l = 5
4248
print(g) # $reads=g
@@ -45,6 +51,7 @@ def global_access():
4551
print(g_mod) # $reads=g_mod
4652
print(g_ins) # $reads=g_ins
4753
print(g_mult) # $reads=g_mult
54+
print(g_mult2) # $reads=g_mult2
4855

4956
def print_g_mod(): # $writes=print_g_mod
5057
print(g_mod) # $reads=g_mod

0 commit comments

Comments
 (0)