Skip to content

Commit 031e44b

Browse files
committed
C#: Add some source/sink model generator test examples.
1 parent 197cdab commit 031e44b

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/csharp-all
4+
extensible: sinkModel
5+
data:
6+
- [ "Sinks", "NewSinks", False, "Sink", "(System.Object)", "", "Argument[0]", "test-sink", "manual"]

csharp/ql/test/utils/modelgenerator/dataflow/Sinks.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ public class NewSinks
1212
public string TaintedProp { get; set; }
1313
public string PrivateSetTaintedProp { get; private set; }
1414

15+
// Sink defined in the extensible file next to the test.
16+
// neutral=Sinks;NewSinks;Sink;(System.Object);summary;df-generated
17+
public void Sink(object o) => throw null;
18+
1519
// New sink
1620
// sink=Sinks;NewSinks;false;WrapResponseWrite;(System.Object);;Argument[0];html-injection;df-generated
1721
// neutral=Sinks;NewSinks;WrapResponseWrite;(System.Object);summary;df-generated
@@ -78,6 +82,15 @@ public void WrapPropPrivateSetResponseWriteFile()
7882
var response = new HttpResponse();
7983
response.WriteFile(PrivateSetTaintedProp);
8084
}
85+
86+
// Not a new sink because a simple type is used in an intermediate step
87+
// SPURIOUS-sink=Sinks;NewSinks;false;WrapResponseWriteFileSimpleType;(System.String);;Argument[0];test-sink;df-generated
88+
// neutral=Sinks;NewSinks;WrapResponseWriteFileSimpleType;(System.String);summary;df-generated
89+
public void WrapResponseWriteFileSimpleType(string s)
90+
{
91+
var r = s == "hello";
92+
Sink(r);
93+
}
8194
}
8295

8396
public class CompoundSinks

csharp/ql/test/utils/modelgenerator/dataflow/Sources.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,36 @@ public ConsoleKeyInfo WrapConsoleReadKey()
3434
{
3535
return Console.ReadKey();
3636
}
37+
38+
// Not a new source because a simple type is used in an intermediate step
39+
// SPURIOUS-source=Sources;NewSources;false;WrapConsoleReadLineGetBool;();;ReturnValue;local;df-generated
40+
// neutral=Sources;NewSources;WrapConsoleReadLineGetBool;();summary;df-generated
41+
public bool WrapConsoleReadLineGetBool()
42+
{
43+
var s = Console.ReadLine();
44+
return s == "hello";
45+
}
46+
47+
public class MyConsoleReader
48+
{
49+
// source=Sources;NewSources+MyConsoleReader;false;ToString;();;ReturnValue;local;df-generated
50+
// neutral=Sources;NewSources+MyConsoleReader;ToString;();summary;df-generated
51+
public override string ToString()
52+
{
53+
return Console.ReadLine();
54+
}
55+
}
56+
57+
58+
public class MyContainer<T>
59+
{
60+
public T Value { get; set; }
61+
62+
// SPURIOUS-source=Sources;NewSources+MyContainer<T>;false;Read;();;ReturnValue;local;df-generated
63+
// summary=Sources;NewSources+MyContainer<T>;false;Read;();;Argument[this];ReturnValue;taint;df-generated
64+
public string Read()
65+
{
66+
return Value.ToString();
67+
}
68+
}
3769
}

0 commit comments

Comments
 (0)