mirror of
https://github.com/github/codeql.git
synced 2026-05-03 12:45:27 +02:00
Merge pull request #7809 from michaelnebel/csharp/test-pattern-match-flow
C#: Add flow test cases for undetected value flow, when making variable bindings in pattern matching.
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
failures
|
||||
edges
|
||||
nodes
|
||||
subpaths
|
||||
#select
|
||||
@@ -0,0 +1,11 @@
|
||||
/**
|
||||
* @kind path-problem
|
||||
*/
|
||||
|
||||
import csharp
|
||||
import DataFlow::PathGraph
|
||||
import TestUtilities.InlineFlowTest
|
||||
|
||||
from DataFlow::PathNode source, DataFlow::PathNode sink, DefaultValueFlowConf conf
|
||||
where conf.hasFlowPath(source, sink)
|
||||
select sink, source, sink, "$@", source, source.toString()
|
||||
54
csharp/ql/test/library-tests/dataflow/patterns/Patterns.cs
Normal file
54
csharp/ql/test/library-tests/dataflow/patterns/Patterns.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
using System;
|
||||
|
||||
public record class RecordClass2(object Prop) { }
|
||||
|
||||
public record class Nested(RecordClass2 Record) { }
|
||||
|
||||
public class K
|
||||
{
|
||||
private void M1()
|
||||
{
|
||||
var o = Source<object>(1);
|
||||
var r = new RecordClass2(o);
|
||||
if (r is RecordClass2 { Prop: object p })
|
||||
{
|
||||
Sink(p); // $ MISSING: hasValueFlow=1
|
||||
}
|
||||
}
|
||||
|
||||
private void M2()
|
||||
{
|
||||
var o = Source<object>(2);
|
||||
var r = new RecordClass2(o);
|
||||
switch (r)
|
||||
{
|
||||
case RecordClass2 { Prop: object p }:
|
||||
Sink(p); // $ MISSING: hasValueFlow=2
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void M3()
|
||||
{
|
||||
var o = Source<object>(3);
|
||||
var s = new Nested(new RecordClass2(o));
|
||||
if (s is Nested { Record: { Prop: object p } })
|
||||
{
|
||||
Sink(p); // $ MISSING: hasValueFlow=3
|
||||
}
|
||||
}
|
||||
|
||||
private void M4()
|
||||
{
|
||||
var o = Source<object>(4);
|
||||
var s = new Nested(new RecordClass2(o));
|
||||
if (s is Nested { Record.Prop: object p })
|
||||
{
|
||||
Sink(p); // $ MISSING: hasValueFlow=4
|
||||
}
|
||||
}
|
||||
|
||||
public static void Sink(object o) { }
|
||||
|
||||
static T Source<T>(object source) => throw null;
|
||||
}
|
||||
Reference in New Issue
Block a user