Skip to content

Commit abec476

Browse files
committed
Python: add debug predicates for unmapped steps
1 parent 5e60551 commit abec476

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,13 @@ module VariableCapture {
520520
Flow::storeStep(closureNodeFrom, v, closureNodeTo)
521521
}
522522

523+
predicate unmappedFlowStoreStep(
524+
Flow::ClosureNode closureNodeFrom, CapturedVariable v, Flow::ClosureNode closureNodeTo
525+
) {
526+
Flow::storeStep(closureNodeFrom, v, closureNodeTo) and
527+
not flowStoreStep(_, closureNodeFrom, v, closureNodeTo, _)
528+
}
529+
523530
predicate flowReadStep(
524531
Node nodeFrom, Flow::ClosureNode closureNodeFrom, CapturedVariable v,
525532
Flow::ClosureNode closureNodeTo, Node nodeTo
@@ -529,13 +536,26 @@ module VariableCapture {
529536
Flow::readStep(closureNodeFrom, v, closureNodeTo)
530537
}
531538

539+
predicate unmappedFlowReadStep(
540+
Flow::ClosureNode closureNodeFrom, CapturedVariable v, Flow::ClosureNode closureNodeTo
541+
) {
542+
Flow::readStep(closureNodeFrom, v, closureNodeTo) and
543+
not flowReadStep(_, closureNodeFrom, v, closureNodeTo, _)
544+
}
545+
532546
predicate flowValueStep(
533547
Node nodeFrom, Flow::ClosureNode closureNodeFrom, Flow::ClosureNode closureNodeTo, Node nodeTo
534548
) {
535549
closureNodeFrom = asClosureNode(nodeFrom) and
536550
closureNodeTo = asClosureNode(nodeTo) and
537551
Flow::localFlowStep(closureNodeFrom, closureNodeTo)
538552
}
553+
554+
predicate unmappedFlowValueStep(
555+
Flow::ClosureNode closureNodeFrom, Flow::ClosureNode closureNodeTo
556+
) {
557+
Flow::localFlowStep(closureNodeFrom, closureNodeTo) and
558+
not flowValueStep(_, closureNodeFrom, closureNodeTo, _)
539559
}
540560
}
541561

0 commit comments

Comments
 (0)