Skip to content

Commit 922e52f

Browse files
authored
Merge pull request github#3257 from hvitved/csharp/dataflow/tests
C#: Update data flow tests
2 parents 86ba03b + a9b88b6 commit 922e52f

17 files changed

+1342
-11470
lines changed

csharp/ql/src/semmle/code/csharp/dataflow/LibraryTypeDataFlow.qll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,11 @@ class IEnumerableFlow extends LibraryTypeDataFlow {
755755
sink = TCallableFlowSinkReturn()
756756
)
757757
or
758+
name = "AsQueryable" and
759+
arity = 1 and
760+
source = TCallableFlowSourceArg(0) and
761+
sink = TCallableFlowSinkReturn()
762+
or
758763
name = "Average" and
759764
(
760765
arity = 2 and

csharp/ql/test/library-tests/dataflow/global/DataFlow.expected

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@
2828
| GlobalDataFlow.cs:181:15:181:19 | access to local variable sink9 |
2929
| GlobalDataFlow.cs:190:15:190:20 | access to local variable sink10 |
3030
| GlobalDataFlow.cs:198:15:198:20 | access to local variable sink19 |
31-
| GlobalDataFlow.cs:237:15:237:24 | access to parameter sinkParam0 |
32-
| GlobalDataFlow.cs:242:15:242:24 | access to parameter sinkParam1 |
33-
| GlobalDataFlow.cs:247:15:247:24 | access to parameter sinkParam3 |
34-
| GlobalDataFlow.cs:252:15:252:24 | access to parameter sinkParam4 |
35-
| GlobalDataFlow.cs:257:15:257:24 | access to parameter sinkParam5 |
36-
| GlobalDataFlow.cs:262:15:262:24 | access to parameter sinkParam6 |
37-
| GlobalDataFlow.cs:267:15:267:24 | access to parameter sinkParam7 |
38-
| GlobalDataFlow.cs:381:15:381:20 | access to local variable sink11 |
39-
| GlobalDataFlow.cs:404:41:404:46 | access to local variable sink20 |
31+
| GlobalDataFlow.cs:239:15:239:24 | access to parameter sinkParam0 |
32+
| GlobalDataFlow.cs:244:15:244:24 | access to parameter sinkParam1 |
33+
| GlobalDataFlow.cs:249:15:249:24 | access to parameter sinkParam3 |
34+
| GlobalDataFlow.cs:254:15:254:24 | access to parameter sinkParam4 |
35+
| GlobalDataFlow.cs:259:15:259:24 | access to parameter sinkParam5 |
36+
| GlobalDataFlow.cs:264:15:264:24 | access to parameter sinkParam6 |
37+
| GlobalDataFlow.cs:269:15:269:24 | access to parameter sinkParam7 |
38+
| GlobalDataFlow.cs:383:15:383:20 | access to local variable sink11 |
39+
| GlobalDataFlow.cs:406:41:406:46 | access to local variable sink20 |
4040
| Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x |
4141
| Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x |
4242
| Splitting.cs:11:19:11:19 | access to local variable x |

csharp/ql/test/library-tests/dataflow/global/DataFlowEdges.expected

Lines changed: 0 additions & 3816 deletions
This file was deleted.

csharp/ql/test/library-tests/dataflow/global/DataFlowEdges.ql

Lines changed: 0 additions & 17 deletions
This file was deleted.

csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected

Lines changed: 91 additions & 91 deletions
Large diffs are not rendered by default.

csharp/ql/test/library-tests/dataflow/global/GetAnOutNode.expected

Lines changed: 74 additions & 61 deletions
Large diffs are not rendered by default.

csharp/ql/test/library-tests/dataflow/global/GlobalDataFlow.cs

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,17 @@ public void M()
7777
var sink3 = "";
7878
ReturnRef(sink2, ref sink3, ref sink3);
7979
Check(sink3);
80-
var sink13 = ((IEnumerable<string>)new string[] { sink3 }).SelectEven(x => x);
80+
var sink13 = ((IEnumerable<string>)new string[] { sink3 }).SelectEven(x => x).First();
8181
Check(sink13);
82-
var sink14 = ((IEnumerable<string>)new string[] { sink13.First() }).Select(ReturnCheck);
82+
var sink14 = ((IEnumerable<string>)new string[] { sink13 }).Select(ReturnCheck).First();
8383
Check(sink14);
84-
var sink15 = ((IEnumerable<string>)new string[] { sink14.First() }).Zip(((IEnumerable<string>)new string[] { "" }), (x, y) => x);
84+
var sink15 = ((IEnumerable<string>)new string[] { sink14 }).Zip(((IEnumerable<string>)new string[] { "" }), (x, y) => x).First();
8585
Check(sink15);
86-
var sink16 = ((IEnumerable<string>)new string[] { "" }).Zip(((IEnumerable<string>)new string[] { sink15.First() }), (x, y) => y);
86+
var sink16 = ((IEnumerable<string>)new string[] { "" }).Zip(((IEnumerable<string>)new string[] { sink15 }), (x, y) => y).First();
8787
Check(sink16);
88-
var sink17 = sink14.Aggregate("", (acc, s) => acc + s, x => x);
88+
var sink17 = ((IEnumerable<string>)new string[] { sink14 }).Aggregate("", (acc, s) => acc + s, x => x);
8989
Check(sink17);
90-
var sink18 = ((IEnumerable<string>)new string[] { "" }).Aggregate(sink14.First(), (acc, s) => acc + s, x => x);
90+
var sink18 = ((IEnumerable<string>)new string[] { "" }).Aggregate(sink14, (acc, s) => acc + s, x => x);
9191
Check(sink18);
9292
int sink21;
9393
Int32.TryParse(sink18, out sink21);
@@ -109,19 +109,19 @@ public void M()
109109
Check(nonSink0);
110110
ReturnRef(sink1, ref sink1, ref nonSink0);
111111
Check(nonSink0);
112-
var nonSink1 = ((IEnumerable<string>)new string[] { nonSink0 }).SelectEven(x => x);
113-
Check(nonSink1);
114-
nonSink1 = ((IEnumerable<string>)new string[] { nonSink0 }).Select(x => x);
115-
Check(nonSink1);
116-
nonSink1 = ((IEnumerable<string>)new string[] { sink14.First() }).Zip(((IEnumerable<string>)new string[] { "" }), (x, y) => y);
117-
Check(nonSink1);
118-
nonSink1 = ((IEnumerable<string>)new string[] { "" }).Zip(((IEnumerable<string>)new string[] { sink15.First() }), (x, y) => x);
119-
Check(nonSink1);
120-
nonSink0 = sink14.Aggregate("", (acc, s) => acc, x => x);
112+
nonSink0 = ((IEnumerable<string>)new string[] { nonSink0 }).SelectEven(x => x).First();
121113
Check(nonSink0);
122-
nonSink0 = sink14.Aggregate("", (acc, s) => acc + s, x => "");
114+
nonSink0 = ((IEnumerable<string>)new string[] { nonSink0 }).Select(x => x).First();
123115
Check(nonSink0);
124-
nonSink0 = nonSink1.Aggregate(sink1, (acc, s) => s, x => x);
116+
nonSink0 = ((IEnumerable<string>)new string[] { sink14 }).Zip(((IEnumerable<string>)new string[] { "" }), (x, y) => y).First();
117+
Check(nonSink0);
118+
nonSink0 = ((IEnumerable<string>)new string[] { "" }).Zip(((IEnumerable<string>)new string[] { sink15 }), (x, y) => x).First();
119+
Check(nonSink0);
120+
nonSink0 = ((IEnumerable<string>)new string[] { sink14 }).Aggregate("", (acc, s) => acc, x => x);
121+
Check(nonSink0);
122+
nonSink0 = ((IEnumerable<string>)new string[] { sink14 }).Aggregate("", (acc, s) => acc + s, x => "");
123+
Check(nonSink0);
124+
nonSink0 = ((IEnumerable<string>)new string[] { nonSink0 }).Aggregate(sink1, (acc, s) => s, x => x);
125125
Check(nonSink0);
126126
int nonSink2;
127127
Int32.TryParse(nonSink0, out nonSink2);
@@ -158,7 +158,7 @@ public void M()
158158
var sink8 = "";
159159
OutRef(ref sink8);
160160
Check(sink8);
161-
var sink12 = OutYield();
161+
var sink12 = OutYield().First();
162162
Check(sink12);
163163
var sink23 = TaintedParam(nonSink0); // even though the argument is not tainted, the parameter is considered tainted
164164
Check(sink23);
@@ -202,30 +202,32 @@ public void M()
202202
Check(nonSink0);
203203
}
204204

205-
public void M2(IQueryable<string> tainted, IQueryable<string> notTainted)
205+
public void M2()
206206
{
207+
IQueryable<string> tainted = new[] { "taint source" }.AsQueryable();
208+
IQueryable<string> notTainted = new[] { "not tainted" }.AsQueryable();
207209
// Flow into a callable via library call, tainted
208210
Func<string, string> f1 = sinkParam10 => { Check(sinkParam10); return sinkParam10; };
209211
System.Linq.Expressions.Expression<Func<string, string>> f2 = x => ReturnCheck2(x);
210-
var sink24 = tainted.Select(f1);
212+
var sink24 = tainted.Select(f1).First();
211213
Check(sink24);
212-
var sink25 = tainted.Select(f2);
214+
var sink25 = tainted.Select(f2).First();
213215
Check(sink25);
214-
var sink26 = tainted.Select(ReturnCheck3);
216+
var sink26 = tainted.Select(ReturnCheck3).First();
215217
Check(sink26);
216218

217219
// Flow into a callable via library call, not tainted
218220
Func<string, string> f3 = nonSinkParam => { Check(nonSinkParam); return nonSinkParam; };
219221
System.Linq.Expressions.Expression<Func<string, string>> f4 = x => NonReturnCheck(x);
220-
var nonSink = notTainted.Select(f1);
222+
var nonSink = notTainted.Select(f1).First();
221223
Check(nonSink);
222-
nonSink = notTainted.Select(f2);
224+
nonSink = notTainted.Select(f2).First();
223225
Check(nonSink);
224-
nonSink = notTainted.Select(f3);
226+
nonSink = notTainted.Select(f3).First();
225227
Check(nonSink);
226-
nonSink = notTainted.Select(f4);
228+
nonSink = notTainted.Select(f4).First();
227229
Check(nonSink);
228-
nonSink = notTainted.Select(ReturnCheck3);
230+
nonSink = notTainted.Select(ReturnCheck3).First();
229231
Check(nonSink);
230232
}
231233

csharp/ql/test/library-tests/dataflow/global/TaintTracking.expected

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,22 @@
3737
| GlobalDataFlow.cs:181:15:181:19 | access to local variable sink9 |
3838
| GlobalDataFlow.cs:190:15:190:20 | access to local variable sink10 |
3939
| GlobalDataFlow.cs:198:15:198:20 | access to local variable sink19 |
40-
| GlobalDataFlow.cs:208:58:208:68 | access to parameter sinkParam10 |
41-
| GlobalDataFlow.cs:211:15:211:20 | access to local variable sink24 |
42-
| GlobalDataFlow.cs:213:15:213:20 | access to local variable sink25 |
43-
| GlobalDataFlow.cs:215:15:215:20 | access to local variable sink26 |
44-
| GlobalDataFlow.cs:237:15:237:24 | access to parameter sinkParam0 |
45-
| GlobalDataFlow.cs:242:15:242:24 | access to parameter sinkParam1 |
46-
| GlobalDataFlow.cs:247:15:247:24 | access to parameter sinkParam3 |
47-
| GlobalDataFlow.cs:252:15:252:24 | access to parameter sinkParam4 |
48-
| GlobalDataFlow.cs:257:15:257:24 | access to parameter sinkParam5 |
49-
| GlobalDataFlow.cs:262:15:262:24 | access to parameter sinkParam6 |
50-
| GlobalDataFlow.cs:267:15:267:24 | access to parameter sinkParam7 |
51-
| GlobalDataFlow.cs:294:15:294:24 | access to parameter sinkParam8 |
52-
| GlobalDataFlow.cs:300:15:300:24 | access to parameter sinkParam9 |
53-
| GlobalDataFlow.cs:306:15:306:25 | access to parameter sinkParam11 |
54-
| GlobalDataFlow.cs:381:15:381:20 | access to local variable sink11 |
55-
| GlobalDataFlow.cs:404:41:404:46 | access to local variable sink20 |
40+
| GlobalDataFlow.cs:210:58:210:68 | access to parameter sinkParam10 |
41+
| GlobalDataFlow.cs:213:15:213:20 | access to local variable sink24 |
42+
| GlobalDataFlow.cs:215:15:215:20 | access to local variable sink25 |
43+
| GlobalDataFlow.cs:217:15:217:20 | access to local variable sink26 |
44+
| GlobalDataFlow.cs:239:15:239:24 | access to parameter sinkParam0 |
45+
| GlobalDataFlow.cs:244:15:244:24 | access to parameter sinkParam1 |
46+
| GlobalDataFlow.cs:249:15:249:24 | access to parameter sinkParam3 |
47+
| GlobalDataFlow.cs:254:15:254:24 | access to parameter sinkParam4 |
48+
| GlobalDataFlow.cs:259:15:259:24 | access to parameter sinkParam5 |
49+
| GlobalDataFlow.cs:264:15:264:24 | access to parameter sinkParam6 |
50+
| GlobalDataFlow.cs:269:15:269:24 | access to parameter sinkParam7 |
51+
| GlobalDataFlow.cs:296:15:296:24 | access to parameter sinkParam8 |
52+
| GlobalDataFlow.cs:302:15:302:24 | access to parameter sinkParam9 |
53+
| GlobalDataFlow.cs:308:15:308:25 | access to parameter sinkParam11 |
54+
| GlobalDataFlow.cs:383:15:383:20 | access to local variable sink11 |
55+
| GlobalDataFlow.cs:406:41:406:46 | access to local variable sink20 |
5656
| Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x |
5757
| Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x |
5858
| Splitting.cs:11:19:11:19 | access to local variable x |

0 commit comments

Comments
 (0)