Skip to content

Commit 97c0267

Browse files
committed
C#: Add data flow test for properties using the field keyword.
1 parent 113f3e8 commit 97c0267

File tree

2 files changed

+316
-0
lines changed

2 files changed

+316
-0
lines changed

csharp/ql/test/library-tests/dataflow/fields/D.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,65 @@ public static void Sink(object o) { }
8989

9090
static T Source<T>(object source) => throw null;
9191
}
92+
93+
public class DFieldProps
94+
{
95+
object FieldProp0
96+
{
97+
get { return field; }
98+
set { field = value; }
99+
} = Source<object>(0);
100+
101+
object FieldProp1
102+
{
103+
get { return field; }
104+
set { field = value; }
105+
}
106+
107+
object FieldProp2
108+
{
109+
get { return field; }
110+
set
111+
{
112+
var x = value;
113+
field = x;
114+
}
115+
}
116+
117+
static object StaticFieldProp
118+
{
119+
get { return field; }
120+
set { field = value; }
121+
}
122+
123+
private void M()
124+
{
125+
var d0 = new DFieldProps();
126+
Sink(d0.FieldProp0); // $ hasValueFlow=0
127+
Sink(d0.FieldProp1); // no flow
128+
Sink(d0.FieldProp2); // no flow
129+
130+
var d1 = new DFieldProps();
131+
var o1 = Source<object>(1);
132+
d1.FieldProp1 = o1;
133+
Sink(d1.FieldProp0); // $ hasValueFlow=0
134+
Sink(d1.FieldProp1); // $ hasValueFlow=1
135+
Sink(d1.FieldProp2); // no flow
136+
137+
var d2 = new DFieldProps();
138+
var o2 = Source<object>(2);
139+
d2.FieldProp2 = o2;
140+
Sink(d2.FieldProp0); // $ hasValueFlow=0
141+
Sink(d2.FieldProp1); // no flow
142+
Sink(d2.FieldProp2); // $ hasValueFlow=2
143+
144+
var o3 = Source<object>(3);
145+
DFieldProps.StaticFieldProp = o3;
146+
Sink(DFieldProps.StaticFieldProp); // $ hasValueFlow=3
147+
}
148+
149+
public static void Sink(object o) { }
150+
151+
static T Source<T>(object source) => throw null;
152+
153+
}

0 commit comments

Comments
 (0)