Skip to content

Commit 4094ec5

Browse files
committed
Python: Change additional dict store/read steps to not affect taint-tracking
1 parent f80a091 commit 4094ec5

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,8 @@ predicate storeStep(Node nodeFrom, Content c, Node nodeTo) {
588588
or
589589
dictStoreStep(nodeFrom, c, nodeTo)
590590
or
591+
moreDictStoreSteps(nodeFrom, c, nodeTo)
592+
or
591593
comprehensionStoreStep(nodeFrom, c, nodeTo)
592594
or
593595
iterableUnpackingStoreStep(nodeFrom, c, nodeTo)
@@ -699,7 +701,15 @@ predicate dictStoreStep(CfgNode nodeFrom, DictionaryElementContent c, Node nodeT
699701
nodeFrom.getNode().getNode() = item.getValue() and
700702
c.getKey() = item.getKey().(StrConst).getS()
701703
)
702-
or
704+
}
705+
706+
/**
707+
* This has been made private since `dictStoreStep` is used by taint-tracking, and
708+
* adding these extra steps made some alerts very noisy.
709+
*
710+
* TODO: Once TaintTracking no longer uses `dictStoreStep`, unify the two predicates.
711+
*/
712+
private predicate moreDictStoreSteps(CfgNode nodeFrom, DictionaryElementContent c, Node nodeTo) {
703713
exists(SubscriptNode subscript |
704714
nodeTo.(PostUpdateNode).getPreUpdateNode().asCfgNode() = subscript.getObject() and
705715
nodeFrom.asCfgNode() = subscript.(DefinitionNode).getValue() and

0 commit comments

Comments
 (0)