Skip to content

Commit 77dbe2c

Browse files
committed
C#: Add default (reverse update) taint step from implicit operator calls to their arguments.
1 parent f0e665d commit 77dbe2c

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,25 @@ private class LocalTaintExprStepConfiguration extends ControlFlowReachabilityCon
109109
}
110110
}
111111

112+
private ControlFlow::Nodes::ExprNode getALastEvalNode(ControlFlow::Nodes::ExprNode cfn) {
113+
exists(Expr e | any(LocalTaintExprStepConfiguration x).hasExprPath(_, result, e, cfn) |
114+
e.(OperatorCall).getTarget() instanceof ImplicitConversionOperator // Should only be implicit operator calls.
115+
)
116+
}
117+
118+
private ControlFlow::Nodes::ExprNode getPostUpdateReverseStep(ControlFlow::Nodes::ExprNode e) {
119+
result = getALastEvalNode(e)
120+
}
121+
112122
private predicate localTaintStepCommon(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
113123
hasNodePath(any(LocalTaintExprStepConfiguration x), nodeFrom, nodeTo)
124+
or
125+
nodeTo.(PostUpdateNode).getPreUpdateNode().(DataFlow::ExprNode).getControlFlowNode() =
126+
getPostUpdateReverseStep(nodeFrom
127+
.(PostUpdateNode)
128+
.getPreUpdateNode()
129+
.(DataFlow::ExprNode)
130+
.getControlFlowNode())
114131
}
115132

116133
cached

0 commit comments

Comments
 (0)