Skip to content

Commit f5598db

Browse files
authored
Merge pull request #2343 from hvitved/csharp/dataflow/assignment-flow
C#: Add missing assignment data flow steps
2 parents 78109db + f9bff17 commit f5598db

File tree

4 files changed

+20
-1
lines changed

4 files changed

+20
-1
lines changed

csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ module LocalFlow {
111111
or
112112
// An `=` expression, where the result of the expression is used
113113
e2 = any(AssignExpr ae |
114-
ae.getParent() instanceof Expr and
114+
ae.getParent() = any(ControlFlowElement cfe | not cfe instanceof ExprStmt) and
115115
e1 = ae.getRValue()
116116
) and
117117
scope = e2 and

csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,10 @@
582582
| LocalDataFlow.cs:464:50:464:52 | value | LocalDataFlow.cs:464:64:464:68 | access to parameter value |
583583
| LocalDataFlow.cs:470:41:470:47 | tainted | LocalDataFlow.cs:472:15:472:21 | access to parameter tainted |
584584
| LocalDataFlow.cs:475:44:475:53 | nonTainted | LocalDataFlow.cs:477:15:477:24 | access to parameter nonTainted |
585+
| LocalDataFlow.cs:480:44:480:44 | x | LocalDataFlow.cs:483:21:483:21 | access to parameter x |
586+
| LocalDataFlow.cs:480:67:480:68 | os | LocalDataFlow.cs:486:32:486:33 | access to parameter os |
587+
| LocalDataFlow.cs:483:21:483:21 | access to parameter x | LocalDataFlow.cs:483:16:483:21 | ... = ... |
588+
| LocalDataFlow.cs:486:32:486:33 | access to parameter os | LocalDataFlow.cs:486:26:486:33 | ... = ... |
585589
| SSA.cs:5:17:5:17 | SSA entry def(this.S) | SSA.cs:67:9:67:14 | access to field S |
586590
| SSA.cs:5:17:5:17 | this | SSA.cs:67:9:67:12 | this access |
587591
| SSA.cs:5:26:5:32 | tainted | SSA.cs:8:24:8:30 | access to parameter tainted |

csharp/ql/test/library-tests/dataflow/local/LocalDataFlow.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,4 +476,13 @@ public void NonTaintedParameter(string nonTainted)
476476
{
477477
Check(nonTainted);
478478
}
479+
480+
public void AssignmentFlow(IDisposable x, IEnumerable<object> os)
481+
{
482+
IDisposable x1;
483+
using (x1 = x) { }
484+
485+
IEnumerable<object> os2;
486+
foreach(var o in os2 = os) { }
487+
}
479488
}

csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,12 @@
730730
| LocalDataFlow.cs:470:41:470:47 | tainted | LocalDataFlow.cs:472:15:472:21 | access to parameter tainted |
731731
| LocalDataFlow.cs:475:44:475:53 | nonTainted | LocalDataFlow.cs:475:44:475:53 | nonTainted |
732732
| LocalDataFlow.cs:475:44:475:53 | nonTainted | LocalDataFlow.cs:477:15:477:24 | access to parameter nonTainted |
733+
| LocalDataFlow.cs:480:44:480:44 | x | LocalDataFlow.cs:480:44:480:44 | x |
734+
| LocalDataFlow.cs:480:44:480:44 | x | LocalDataFlow.cs:483:21:483:21 | access to parameter x |
735+
| LocalDataFlow.cs:480:67:480:68 | os | LocalDataFlow.cs:480:67:480:68 | os |
736+
| LocalDataFlow.cs:480:67:480:68 | os | LocalDataFlow.cs:486:32:486:33 | access to parameter os |
737+
| LocalDataFlow.cs:483:21:483:21 | access to parameter x | LocalDataFlow.cs:483:16:483:21 | ... = ... |
738+
| LocalDataFlow.cs:486:32:486:33 | access to parameter os | LocalDataFlow.cs:486:26:486:33 | ... = ... |
733739
| SSA.cs:5:17:5:17 | SSA entry def(this.S) | SSA.cs:67:9:67:14 | access to field S |
734740
| SSA.cs:5:17:5:17 | this | SSA.cs:67:9:67:12 | this access |
735741
| SSA.cs:5:26:5:32 | tainted | SSA.cs:5:26:5:32 | tainted |

0 commit comments

Comments
 (0)