mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
C#: Add data flow tests for implicit index usage.
This commit is contained in:
@@ -13,6 +13,8 @@ public class CollectionFlow
|
||||
|
||||
public static void SinkElem<T>(T[] ts) => Sink(ts[0]);
|
||||
|
||||
public static void SinkLastElem<T>(T[] ts) => Sink(ts[^1]);
|
||||
|
||||
public static void SinkListElem<T>(IList<T> list) => Sink(list[0]);
|
||||
|
||||
public static void SinkDictValue<T>(IDictionary<int, T> dict) => Sink(dict[0]);
|
||||
@@ -21,6 +23,8 @@ public class CollectionFlow
|
||||
|
||||
public static T First<T>(T[] ts) => ts[0];
|
||||
|
||||
public static T Last<T>(T[] ts) => ts[^1];
|
||||
|
||||
public static T ListFirst<T>(IList<T> list) => list[0];
|
||||
|
||||
public static T DictIndexZero<T>(IDictionary<int, T> dict) => dict[0];
|
||||
@@ -73,6 +77,15 @@ public class CollectionFlow
|
||||
Sink(First(c.As)); // no flow
|
||||
}
|
||||
|
||||
public void ArrayInitializerImplicitIndexFlow()
|
||||
{
|
||||
var a = new A();
|
||||
var c = new CollectionFlow() { As = { [^1] = a } };
|
||||
Sink(c.As[^1]); // flow
|
||||
SinkLastElem(c.As); // flow
|
||||
Sink(Last(c.As)); // flow
|
||||
}
|
||||
|
||||
public void ArrayAssignmentFlow()
|
||||
{
|
||||
var a = new A();
|
||||
@@ -93,6 +106,16 @@ public class CollectionFlow
|
||||
Sink(First(@as)); // no flow
|
||||
}
|
||||
|
||||
public void ArrayAssignmentImplicitIndexFlow()
|
||||
{
|
||||
var a = new A();
|
||||
var @as = new A[1];
|
||||
@as[^1] = a;
|
||||
Sink(@as[^1]); // flow
|
||||
SinkLastElem(@as); // flow
|
||||
Sink(Last(@as)); // flow
|
||||
}
|
||||
|
||||
public void ListAssignmentFlow()
|
||||
{
|
||||
var a = new A();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user