mirror of
https://github.com/github/codeql.git
synced 2026-04-26 09:15:12 +02:00
C#: Add dataflow test for tuple-positional pattern
This commit is contained in:
@@ -52,11 +52,12 @@
|
||||
| Tuples.cs:43:47:43:68 | (..., ...) | Tuples.cs:43:47:43:68 | (...) ... |
|
||||
| Tuples.cs:44:14:44:14 | [post] access to local variable y | Tuples.cs:45:14:45:14 | access to local variable y |
|
||||
| Tuples.cs:44:14:44:14 | access to local variable y | Tuples.cs:45:14:45:14 | access to local variable y |
|
||||
| Tuples.cs:48:27:48:27 | s | Tuples.cs:65:18:65:18 | access to parameter s |
|
||||
| Tuples.cs:50:13:50:56 | SSA def(x) | Tuples.cs:51:17:51:17 | access to local variable x |
|
||||
| Tuples.cs:50:17:50:56 | (..., ...) | Tuples.cs:50:13:50:56 | SSA def(x) |
|
||||
| Tuples.cs:51:17:51:17 | access to local variable x | Tuples.cs:53:18:53:57 | SSA def(t) |
|
||||
| Tuples.cs:51:17:51:17 | access to local variable x | Tuples.cs:58:18:58:35 | (..., ...) |
|
||||
| Tuples.cs:51:17:51:17 | access to local variable x | Tuples.cs:65:13:65:13 | access to local variable x |
|
||||
| Tuples.cs:51:17:51:17 | access to local variable x | Tuples.cs:77:13:77:13 | access to local variable x |
|
||||
| Tuples.cs:53:18:53:57 | SSA def(t) | Tuples.cs:53:64:53:64 | access to local variable t |
|
||||
| Tuples.cs:53:18:53:57 | SSA qualifier def(t.Item1) | Tuples.cs:54:22:54:28 | access to field Item1 |
|
||||
| Tuples.cs:53:18:53:57 | SSA qualifier def(t.Item2) | Tuples.cs:55:22:55:28 | access to field Item2 |
|
||||
@@ -73,19 +74,36 @@
|
||||
| Tuples.cs:58:23:58:23 | SSA def(a) | Tuples.cs:59:22:59:22 | access to local variable a |
|
||||
| Tuples.cs:58:27:58:27 | SSA def(b) | Tuples.cs:61:22:61:22 | access to local variable b |
|
||||
| Tuples.cs:58:30:58:30 | SSA def(c) | Tuples.cs:60:22:60:22 | access to local variable c |
|
||||
| Tuples.cs:65:13:65:13 | access to local variable x | Tuples.cs:65:18:65:35 | (..., ...) |
|
||||
| Tuples.cs:65:23:65:23 | SSA def(p) | Tuples.cs:67:18:67:18 | access to local variable p |
|
||||
| Tuples.cs:65:27:65:27 | SSA def(q) | Tuples.cs:69:18:69:18 | access to local variable q |
|
||||
| Tuples.cs:65:30:65:30 | SSA def(r) | Tuples.cs:68:18:68:18 | access to local variable r |
|
||||
| Tuples.cs:77:13:77:41 | SSA def(r) | Tuples.cs:78:14:78:14 | access to local variable r |
|
||||
| Tuples.cs:77:13:77:41 | SSA qualifier def(r.i) | Tuples.cs:78:14:78:16 | access to property i |
|
||||
| Tuples.cs:77:17:77:41 | object creation of type R1 | Tuples.cs:77:13:77:41 | SSA def(r) |
|
||||
| Tuples.cs:78:14:78:14 | [post] access to local variable r | Tuples.cs:80:22:80:22 | access to local variable r |
|
||||
| Tuples.cs:78:14:78:14 | access to local variable r | Tuples.cs:80:22:80:22 | access to local variable r |
|
||||
| Tuples.cs:80:9:80:22 | SSA def(a) | Tuples.cs:81:14:81:14 | access to local variable a |
|
||||
| Tuples.cs:80:9:80:22 | SSA def(b) | Tuples.cs:82:14:82:14 | access to local variable b |
|
||||
| Tuples.cs:80:22:80:22 | access to local variable r | Tuples.cs:80:9:80:18 | (..., ...) |
|
||||
| Tuples.cs:80:22:80:22 | access to local variable r | Tuples.cs:84:17:84:17 | access to local variable r |
|
||||
| Tuples.cs:84:17:84:17 | access to local variable r | Tuples.cs:86:18:86:27 | (..., ...) |
|
||||
| Tuples.cs:86:23:86:23 | SSA def(x) | Tuples.cs:87:22:87:22 | access to local variable x |
|
||||
| Tuples.cs:86:26:86:26 | SSA def(y) | Tuples.cs:88:22:88:22 | access to local variable y |
|
||||
| Tuples.cs:65:13:65:30 | SSA def(y) | Tuples.cs:66:17:66:17 | access to local variable y |
|
||||
| Tuples.cs:65:13:65:30 | SSA qualifier def(y.Item1) | Tuples.cs:69:22:69:28 | access to field Item1 |
|
||||
| Tuples.cs:65:13:65:30 | SSA qualifier def(y.Item2) | Tuples.cs:70:22:70:28 | access to field Item2 |
|
||||
| Tuples.cs:65:13:65:30 | SSA qualifier def(y.Item2.Item1) | Tuples.cs:72:22:72:34 | access to field Item1 |
|
||||
| Tuples.cs:65:13:65:30 | SSA qualifier def(y.Item2.Item2) | Tuples.cs:70:22:70:34 | access to field Item2 |
|
||||
| Tuples.cs:65:17:65:30 | (..., ...) | Tuples.cs:65:13:65:30 | SSA def(y) |
|
||||
| Tuples.cs:65:18:65:18 | access to parameter s | Tuples.cs:65:25:65:25 | access to parameter s |
|
||||
| Tuples.cs:66:17:66:17 | access to local variable y | Tuples.cs:68:35:68:44 | (..., ...) |
|
||||
| Tuples.cs:66:17:66:17 | access to local variable y | Tuples.cs:69:22:69:22 | access to local variable y |
|
||||
| Tuples.cs:68:40:68:40 | SSA def(b) | Tuples.cs:73:22:73:22 | access to local variable b |
|
||||
| Tuples.cs:68:43:68:43 | SSA def(c) | Tuples.cs:71:22:71:22 | access to local variable c |
|
||||
| Tuples.cs:69:22:69:22 | [post] access to local variable y | Tuples.cs:70:22:70:22 | access to local variable y |
|
||||
| Tuples.cs:69:22:69:22 | access to local variable y | Tuples.cs:70:22:70:22 | access to local variable y |
|
||||
| Tuples.cs:70:22:70:22 | [post] access to local variable y | Tuples.cs:72:22:72:22 | access to local variable y |
|
||||
| Tuples.cs:70:22:70:22 | access to local variable y | Tuples.cs:72:22:72:22 | access to local variable y |
|
||||
| Tuples.cs:70:22:70:28 | [post] access to field Item2 | Tuples.cs:72:22:72:28 | access to field Item2 |
|
||||
| Tuples.cs:70:22:70:28 | access to field Item2 | Tuples.cs:72:22:72:28 | access to field Item2 |
|
||||
| Tuples.cs:77:13:77:13 | access to local variable x | Tuples.cs:77:18:77:35 | (..., ...) |
|
||||
| Tuples.cs:77:23:77:23 | SSA def(p) | Tuples.cs:79:18:79:18 | access to local variable p |
|
||||
| Tuples.cs:77:27:77:27 | SSA def(q) | Tuples.cs:81:18:81:18 | access to local variable q |
|
||||
| Tuples.cs:77:30:77:30 | SSA def(r) | Tuples.cs:80:18:80:18 | access to local variable r |
|
||||
| Tuples.cs:89:13:89:41 | SSA def(r) | Tuples.cs:90:14:90:14 | access to local variable r |
|
||||
| Tuples.cs:89:13:89:41 | SSA qualifier def(r.i) | Tuples.cs:90:14:90:16 | access to property i |
|
||||
| Tuples.cs:89:17:89:41 | object creation of type R1 | Tuples.cs:89:13:89:41 | SSA def(r) |
|
||||
| Tuples.cs:90:14:90:14 | [post] access to local variable r | Tuples.cs:92:22:92:22 | access to local variable r |
|
||||
| Tuples.cs:90:14:90:14 | access to local variable r | Tuples.cs:92:22:92:22 | access to local variable r |
|
||||
| Tuples.cs:92:9:92:22 | SSA def(a) | Tuples.cs:93:14:93:14 | access to local variable a |
|
||||
| Tuples.cs:92:9:92:22 | SSA def(b) | Tuples.cs:94:14:94:14 | access to local variable b |
|
||||
| Tuples.cs:92:22:92:22 | access to local variable r | Tuples.cs:92:9:92:18 | (..., ...) |
|
||||
| Tuples.cs:92:22:92:22 | access to local variable r | Tuples.cs:96:17:96:17 | access to local variable r |
|
||||
| Tuples.cs:96:17:96:17 | access to local variable r | Tuples.cs:98:18:98:27 | (..., ...) |
|
||||
| Tuples.cs:98:23:98:23 | SSA def(x) | Tuples.cs:99:22:99:22 | access to local variable x |
|
||||
| Tuples.cs:98:26:98:26 | SSA def(y) | Tuples.cs:100:22:100:22 | access to local variable y |
|
||||
|
||||
@@ -161,6 +161,9 @@ Tuples.cs:
|
||||
# 45| -1: [LocalVariableAccess] access to local variable y
|
||||
# 48| 8: [Method] M4
|
||||
# 48| -1: [TypeMention] Void
|
||||
#-----| 2: (Parameters)
|
||||
# 48| 0: [Parameter] s
|
||||
# 48| -1: [TypeMention] string
|
||||
# 49| 4: [BlockStmt] {...}
|
||||
# 50| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 50| 0: [LocalVariableDeclAndInitExpr] (String,(Int32,String),Int32) x = ...
|
||||
@@ -218,99 +221,140 @@ Tuples.cs:
|
||||
# 61| 0: [MethodCall] call to method Sink
|
||||
# 61| 0: [LocalVariableAccess] access to local variable b
|
||||
# 62| 9: [BreakStmt] break;
|
||||
# 65| 2: [IfStmt] if (...) ...
|
||||
# 65| 0: [IsExpr] ... is ...
|
||||
# 65| 0: [LocalVariableAccess] access to local variable x
|
||||
# 65| 2: [LocalVariableDeclStmt] ... ...;
|
||||
# 65| 0: [LocalVariableDeclAndInitExpr] (String,(Int32,String),Int32) y = ...
|
||||
# 65| -1: [TypeMention] (string, (int, string), int)
|
||||
# 65| 0: [LocalVariableAccess] access to local variable y
|
||||
# 65| 1: [TupleExpr] (..., ...)
|
||||
# 65| 0: [LocalVariableDeclExpr] String p
|
||||
# 65| 0: [ParameterAccess] access to parameter s
|
||||
# 65| 1: [TupleExpr] (..., ...)
|
||||
# 65| 0: [LocalVariableDeclExpr] Int32 q
|
||||
# 65| 1: [LocalVariableDeclExpr] String r
|
||||
# 65| 2: [DiscardExpr] _
|
||||
# 66| 1: [BlockStmt] {...}
|
||||
# 67| 0: [ExprStmt] ...;
|
||||
# 67| 0: [MethodCall] call to method Sink
|
||||
# 67| 0: [LocalVariableAccess] access to local variable p
|
||||
# 68| 1: [ExprStmt] ...;
|
||||
# 68| 0: [MethodCall] call to method Sink
|
||||
# 68| 0: [LocalVariableAccess] access to local variable r
|
||||
# 69| 2: [ExprStmt] ...;
|
||||
# 69| 0: [MethodCall] call to method Sink
|
||||
# 69| 0: [LocalVariableAccess] access to local variable q
|
||||
# 73| 9: [Record] R1
|
||||
# 73| 12: [NEOperator] !=
|
||||
# 65| 0: [IntLiteral] 2
|
||||
# 65| 1: [ParameterAccess] access to parameter s
|
||||
# 65| 2: [IntLiteral] 3
|
||||
# 66| 3: [SwitchStmt] switch (...) {...}
|
||||
# 66| 0: [LocalVariableAccess] access to local variable y
|
||||
# 68| 0: [CaseStmt] case ...:
|
||||
# 68| 0: [RecursivePatternExpr] { ... }
|
||||
# 68| 2: [PositionalPatternExpr] ( ... )
|
||||
# 68| 0: [ConstantPatternExpr,StringLiteral] "taint source"
|
||||
# 68| 1: [TupleExpr] (..., ...)
|
||||
# 68| 0: [LocalVariableDeclExpr] Int32 b
|
||||
# 68| 1: [LocalVariableDeclExpr] String c
|
||||
# 68| 2: [DiscardPatternExpr] _
|
||||
# 69| 1: [ExprStmt] ...;
|
||||
# 69| 0: [MethodCall] call to method Sink
|
||||
# 69| 0: [FieldAccess] access to field Item1
|
||||
# 69| -1: [LocalVariableAccess] access to local variable y
|
||||
# 70| 2: [ExprStmt] ...;
|
||||
# 70| 0: [MethodCall] call to method Sink
|
||||
# 70| 0: [FieldAccess] access to field Item2
|
||||
# 70| -1: [FieldAccess] access to field Item2
|
||||
# 70| -1: [LocalVariableAccess] access to local variable y
|
||||
# 71| 3: [ExprStmt] ...;
|
||||
# 71| 0: [MethodCall] call to method Sink
|
||||
# 71| 0: [LocalVariableAccess] access to local variable c
|
||||
# 72| 4: [ExprStmt] ...;
|
||||
# 72| 0: [MethodCall] call to method Sink
|
||||
# 72| 0: [FieldAccess] access to field Item1
|
||||
# 72| -1: [FieldAccess] access to field Item2
|
||||
# 72| -1: [LocalVariableAccess] access to local variable y
|
||||
# 73| 5: [ExprStmt] ...;
|
||||
# 73| 0: [MethodCall] call to method Sink
|
||||
# 73| 0: [LocalVariableAccess] access to local variable b
|
||||
# 74| 6: [BreakStmt] break;
|
||||
# 77| 4: [IfStmt] if (...) ...
|
||||
# 77| 0: [IsExpr] ... is ...
|
||||
# 77| 0: [LocalVariableAccess] access to local variable x
|
||||
# 77| 1: [TupleExpr] (..., ...)
|
||||
# 77| 0: [LocalVariableDeclExpr] String p
|
||||
# 77| 1: [TupleExpr] (..., ...)
|
||||
# 77| 0: [LocalVariableDeclExpr] Int32 q
|
||||
# 77| 1: [LocalVariableDeclExpr] String r
|
||||
# 77| 2: [DiscardExpr] _
|
||||
# 78| 1: [BlockStmt] {...}
|
||||
# 79| 0: [ExprStmt] ...;
|
||||
# 79| 0: [MethodCall] call to method Sink
|
||||
# 79| 0: [LocalVariableAccess] access to local variable p
|
||||
# 80| 1: [ExprStmt] ...;
|
||||
# 80| 0: [MethodCall] call to method Sink
|
||||
# 80| 0: [LocalVariableAccess] access to local variable r
|
||||
# 81| 2: [ExprStmt] ...;
|
||||
# 81| 0: [MethodCall] call to method Sink
|
||||
# 81| 0: [LocalVariableAccess] access to local variable q
|
||||
# 85| 9: [Record] R1
|
||||
# 85| 12: [NEOperator] !=
|
||||
#-----| 2: (Parameters)
|
||||
# 73| 0: [Parameter] r1
|
||||
# 73| 1: [Parameter] r2
|
||||
# 73| 13: [EQOperator] ==
|
||||
# 85| 0: [Parameter] r1
|
||||
# 85| 1: [Parameter] r2
|
||||
# 85| 13: [EQOperator] ==
|
||||
#-----| 2: (Parameters)
|
||||
# 73| 0: [Parameter] r1
|
||||
# 73| 1: [Parameter] r2
|
||||
# 73| 14: [Property] EqualityContract
|
||||
# 73| 3: [Getter] get_EqualityContract
|
||||
# 73| 15: [InstanceConstructor] R1
|
||||
# 85| 0: [Parameter] r1
|
||||
# 85| 1: [Parameter] r2
|
||||
# 85| 14: [Property] EqualityContract
|
||||
# 85| 3: [Getter] get_EqualityContract
|
||||
# 85| 15: [InstanceConstructor] R1
|
||||
#-----| 2: (Parameters)
|
||||
# 73| 0: [Parameter] i
|
||||
# 73| -1: [TypeMention] string
|
||||
# 73| 1: [Parameter] j
|
||||
# 73| -1: [TypeMention] int
|
||||
# 73| 16: [Property] i
|
||||
# 73| 3: [Getter] get_i
|
||||
# 73| 4: [Setter] set_i
|
||||
# 85| 0: [Parameter] i
|
||||
# 85| -1: [TypeMention] string
|
||||
# 85| 1: [Parameter] j
|
||||
# 85| -1: [TypeMention] int
|
||||
# 85| 16: [Property] i
|
||||
# 85| 3: [Getter] get_i
|
||||
# 85| 4: [Setter] set_i
|
||||
#-----| 2: (Parameters)
|
||||
# 73| 0: [Parameter] value
|
||||
# 73| 17: [Property] j
|
||||
# 73| 3: [Getter] get_j
|
||||
# 73| 4: [Setter] set_j
|
||||
# 85| 0: [Parameter] value
|
||||
# 85| 17: [Property] j
|
||||
# 85| 3: [Getter] get_j
|
||||
# 85| 4: [Setter] set_j
|
||||
#-----| 2: (Parameters)
|
||||
# 73| 0: [Parameter] value
|
||||
# 75| 10: [Method] M5
|
||||
# 75| -1: [TypeMention] Void
|
||||
# 76| 4: [BlockStmt] {...}
|
||||
# 77| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 77| 0: [LocalVariableDeclAndInitExpr] R1 r = ...
|
||||
# 77| -1: [TypeMention] R1
|
||||
# 77| 0: [LocalVariableAccess] access to local variable r
|
||||
# 77| 1: [ObjectCreation] object creation of type R1
|
||||
# 77| -1: [TypeMention] R1
|
||||
# 77| 0: [StringLiteral] "taint source"
|
||||
# 77| 1: [IntLiteral] 1
|
||||
# 78| 1: [ExprStmt] ...;
|
||||
# 78| 0: [MethodCall] call to method Sink
|
||||
# 78| 0: [PropertyCall] access to property i
|
||||
# 78| -1: [LocalVariableAccess] access to local variable r
|
||||
# 80| 2: [ExprStmt] ...;
|
||||
# 80| 0: [AssignExpr] ... = ...
|
||||
# 80| 0: [TupleExpr] (..., ...)
|
||||
# 80| 0: [LocalVariableDeclExpr] String a
|
||||
# 80| 1: [LocalVariableDeclExpr] Int32 b
|
||||
# 80| 1: [LocalVariableAccess] access to local variable r
|
||||
# 81| 3: [ExprStmt] ...;
|
||||
# 81| 0: [MethodCall] call to method Sink
|
||||
# 81| 0: [LocalVariableAccess] access to local variable a
|
||||
# 82| 4: [ExprStmt] ...;
|
||||
# 82| 0: [MethodCall] call to method Sink
|
||||
# 82| 0: [LocalVariableAccess] access to local variable b
|
||||
# 84| 5: [SwitchStmt] switch (...) {...}
|
||||
# 84| 0: [LocalVariableAccess] access to local variable r
|
||||
# 86| 0: [CaseStmt] case ...:
|
||||
# 86| 0: [TupleExpr] (..., ...)
|
||||
# 86| 0: [LocalVariableDeclExpr] String x
|
||||
# 86| 1: [LocalVariableDeclExpr] Int32 y
|
||||
# 87| 1: [ExprStmt] ...;
|
||||
# 87| 0: [MethodCall] call to method Sink
|
||||
# 87| 0: [LocalVariableAccess] access to local variable x
|
||||
# 88| 2: [ExprStmt] ...;
|
||||
# 88| 0: [MethodCall] call to method Sink
|
||||
# 88| 0: [LocalVariableAccess] access to local variable y
|
||||
# 89| 3: [BreakStmt] break;
|
||||
# 93| 11: [Method] Sink
|
||||
# 93| -1: [TypeMention] Void
|
||||
# 85| 0: [Parameter] value
|
||||
# 87| 10: [Method] M5
|
||||
# 87| -1: [TypeMention] Void
|
||||
# 88| 4: [BlockStmt] {...}
|
||||
# 89| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 89| 0: [LocalVariableDeclAndInitExpr] R1 r = ...
|
||||
# 89| -1: [TypeMention] R1
|
||||
# 89| 0: [LocalVariableAccess] access to local variable r
|
||||
# 89| 1: [ObjectCreation] object creation of type R1
|
||||
# 89| -1: [TypeMention] R1
|
||||
# 89| 0: [StringLiteral] "taint source"
|
||||
# 89| 1: [IntLiteral] 1
|
||||
# 90| 1: [ExprStmt] ...;
|
||||
# 90| 0: [MethodCall] call to method Sink
|
||||
# 90| 0: [PropertyCall] access to property i
|
||||
# 90| -1: [LocalVariableAccess] access to local variable r
|
||||
# 92| 2: [ExprStmt] ...;
|
||||
# 92| 0: [AssignExpr] ... = ...
|
||||
# 92| 0: [TupleExpr] (..., ...)
|
||||
# 92| 0: [LocalVariableDeclExpr] String a
|
||||
# 92| 1: [LocalVariableDeclExpr] Int32 b
|
||||
# 92| 1: [LocalVariableAccess] access to local variable r
|
||||
# 93| 3: [ExprStmt] ...;
|
||||
# 93| 0: [MethodCall] call to method Sink
|
||||
# 93| 0: [LocalVariableAccess] access to local variable a
|
||||
# 94| 4: [ExprStmt] ...;
|
||||
# 94| 0: [MethodCall] call to method Sink
|
||||
# 94| 0: [LocalVariableAccess] access to local variable b
|
||||
# 96| 5: [SwitchStmt] switch (...) {...}
|
||||
# 96| 0: [LocalVariableAccess] access to local variable r
|
||||
# 98| 0: [CaseStmt] case ...:
|
||||
# 98| 0: [TupleExpr] (..., ...)
|
||||
# 98| 0: [LocalVariableDeclExpr] String x
|
||||
# 98| 1: [LocalVariableDeclExpr] Int32 y
|
||||
# 99| 1: [ExprStmt] ...;
|
||||
# 99| 0: [MethodCall] call to method Sink
|
||||
# 99| 0: [LocalVariableAccess] access to local variable x
|
||||
# 100| 2: [ExprStmt] ...;
|
||||
# 100| 0: [MethodCall] call to method Sink
|
||||
# 100| 0: [LocalVariableAccess] access to local variable y
|
||||
# 101| 3: [BreakStmt] break;
|
||||
# 105| 11: [Method] Sink
|
||||
# 105| -1: [TypeMention] Void
|
||||
#-----| 1: (Type parameters)
|
||||
# 93| 0: [TypeParameter] T
|
||||
# 105| 0: [TypeParameter] T
|
||||
#-----| 2: (Parameters)
|
||||
# 93| 0: [Parameter] x
|
||||
# 93| -1: [TypeMention] T
|
||||
# 93| 4: [BlockStmt] {...}
|
||||
# 96| [NamespaceDeclaration] namespace ... { ... }
|
||||
# 98| 1: [Class] IsExternalInit
|
||||
# 105| 0: [Parameter] x
|
||||
# 105| -1: [TypeMention] T
|
||||
# 105| 4: [BlockStmt] {...}
|
||||
# 108| [NamespaceDeclaration] namespace ... { ... }
|
||||
# 110| 1: [Class] IsExternalInit
|
||||
|
||||
@@ -45,7 +45,7 @@ class Tuples
|
||||
Sink(y.Item2);
|
||||
}
|
||||
|
||||
static void M4()
|
||||
static void M4(string s)
|
||||
{
|
||||
var x = ("taint source", (2, "taint source"), 3);
|
||||
switch (x)
|
||||
@@ -62,6 +62,18 @@ class Tuples
|
||||
break;
|
||||
}
|
||||
|
||||
var y = (s, (2, s), 3);
|
||||
switch (y)
|
||||
{
|
||||
case ("taint source", var (b, c), _):
|
||||
Sink(y.Item1); // Tainted, not found
|
||||
Sink(y.Item2.Item2); // Tainted, not found
|
||||
Sink(c); // Tainted, not found
|
||||
Sink(y.Item2.Item1);
|
||||
Sink(b);
|
||||
break;
|
||||
}
|
||||
|
||||
if (x is var (p, (q, r), _))
|
||||
{
|
||||
Sink(p); // Tainted
|
||||
|
||||
@@ -42,10 +42,10 @@ edges
|
||||
| Tuples.cs:40:14:40:14 | access to local variable x [Item1] : String | Tuples.cs:40:14:40:20 | access to field Item1 |
|
||||
| Tuples.cs:50:17:50:56 | (..., ...) [Item1] : String | Tuples.cs:53:18:53:57 | SSA def(t) [Item1] : String |
|
||||
| Tuples.cs:50:17:50:56 | (..., ...) [Item1] : String | Tuples.cs:58:18:58:35 | (..., ...) [Item1] : String |
|
||||
| Tuples.cs:50:17:50:56 | (..., ...) [Item1] : String | Tuples.cs:65:18:65:35 | (..., ...) [Item1] : String |
|
||||
| Tuples.cs:50:17:50:56 | (..., ...) [Item1] : String | Tuples.cs:77:18:77:35 | (..., ...) [Item1] : String |
|
||||
| Tuples.cs:50:17:50:56 | (..., ...) [Item2, Item2] : String | Tuples.cs:53:18:53:57 | SSA def(t) [Item2, Item2] : String |
|
||||
| Tuples.cs:50:17:50:56 | (..., ...) [Item2, Item2] : String | Tuples.cs:58:18:58:35 | (..., ...) [Item2, Item2] : String |
|
||||
| Tuples.cs:50:17:50:56 | (..., ...) [Item2, Item2] : String | Tuples.cs:65:18:65:35 | (..., ...) [Item2, Item2] : String |
|
||||
| Tuples.cs:50:17:50:56 | (..., ...) [Item2, Item2] : String | Tuples.cs:77:18:77:35 | (..., ...) [Item2, Item2] : String |
|
||||
| Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:50:17:50:56 | (..., ...) [Item1] : String |
|
||||
| Tuples.cs:50:34:50:52 | (..., ...) [Item2] : String | Tuples.cs:50:17:50:56 | (..., ...) [Item2, Item2] : String |
|
||||
| Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:50:34:50:52 | (..., ...) [Item2] : String |
|
||||
@@ -59,14 +59,14 @@ edges
|
||||
| Tuples.cs:58:18:58:35 | (..., ...) [Item2] : String | Tuples.cs:58:30:58:30 | SSA def(c) : String |
|
||||
| Tuples.cs:58:23:58:23 | SSA def(a) : String | Tuples.cs:59:22:59:22 | access to local variable a |
|
||||
| Tuples.cs:58:30:58:30 | SSA def(c) : String | Tuples.cs:60:22:60:22 | access to local variable c |
|
||||
| Tuples.cs:65:18:65:35 | (..., ...) [Item1] : String | Tuples.cs:65:23:65:23 | SSA def(p) : String |
|
||||
| Tuples.cs:65:18:65:35 | (..., ...) [Item2, Item2] : String | Tuples.cs:65:18:65:35 | (..., ...) [Item2] : String |
|
||||
| Tuples.cs:65:18:65:35 | (..., ...) [Item2] : String | Tuples.cs:65:30:65:30 | SSA def(r) : String |
|
||||
| Tuples.cs:65:23:65:23 | SSA def(p) : String | Tuples.cs:67:18:67:18 | access to local variable p |
|
||||
| Tuples.cs:65:30:65:30 | SSA def(r) : String | Tuples.cs:68:18:68:18 | access to local variable r |
|
||||
| Tuples.cs:77:17:77:41 | object creation of type R1 [i] : String | Tuples.cs:78:14:78:14 | access to local variable r [i] : String |
|
||||
| Tuples.cs:77:24:77:37 | "taint source" : String | Tuples.cs:77:17:77:41 | object creation of type R1 [i] : String |
|
||||
| Tuples.cs:78:14:78:14 | access to local variable r [i] : String | Tuples.cs:78:14:78:16 | access to property i |
|
||||
| Tuples.cs:77:18:77:35 | (..., ...) [Item1] : String | Tuples.cs:77:23:77:23 | SSA def(p) : String |
|
||||
| Tuples.cs:77:18:77:35 | (..., ...) [Item2, Item2] : String | Tuples.cs:77:18:77:35 | (..., ...) [Item2] : String |
|
||||
| Tuples.cs:77:18:77:35 | (..., ...) [Item2] : String | Tuples.cs:77:30:77:30 | SSA def(r) : String |
|
||||
| Tuples.cs:77:23:77:23 | SSA def(p) : String | Tuples.cs:79:18:79:18 | access to local variable p |
|
||||
| Tuples.cs:77:30:77:30 | SSA def(r) : String | Tuples.cs:80:18:80:18 | access to local variable r |
|
||||
| Tuples.cs:89:17:89:41 | object creation of type R1 [i] : String | Tuples.cs:90:14:90:14 | access to local variable r [i] : String |
|
||||
| Tuples.cs:89:24:89:37 | "taint source" : String | Tuples.cs:89:17:89:41 | object creation of type R1 [i] : String |
|
||||
| Tuples.cs:90:14:90:14 | access to local variable r [i] : String | Tuples.cs:90:14:90:16 | access to property i |
|
||||
nodes
|
||||
| Tuples.cs:7:17:7:56 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
|
||||
| Tuples.cs:7:17:7:56 | (..., ...) [Item2, Item2] : String | semmle.label | (..., ...) [Item2, Item2] : String |
|
||||
@@ -133,17 +133,17 @@ nodes
|
||||
| Tuples.cs:58:30:58:30 | SSA def(c) : String | semmle.label | SSA def(c) : String |
|
||||
| Tuples.cs:59:22:59:22 | access to local variable a | semmle.label | access to local variable a |
|
||||
| Tuples.cs:60:22:60:22 | access to local variable c | semmle.label | access to local variable c |
|
||||
| Tuples.cs:65:18:65:35 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
|
||||
| Tuples.cs:65:18:65:35 | (..., ...) [Item2, Item2] : String | semmle.label | (..., ...) [Item2, Item2] : String |
|
||||
| Tuples.cs:65:18:65:35 | (..., ...) [Item2] : String | semmle.label | (..., ...) [Item2] : String |
|
||||
| Tuples.cs:65:23:65:23 | SSA def(p) : String | semmle.label | SSA def(p) : String |
|
||||
| Tuples.cs:65:30:65:30 | SSA def(r) : String | semmle.label | SSA def(r) : String |
|
||||
| Tuples.cs:67:18:67:18 | access to local variable p | semmle.label | access to local variable p |
|
||||
| Tuples.cs:68:18:68:18 | access to local variable r | semmle.label | access to local variable r |
|
||||
| Tuples.cs:77:17:77:41 | object creation of type R1 [i] : String | semmle.label | object creation of type R1 [i] : String |
|
||||
| Tuples.cs:77:24:77:37 | "taint source" : String | semmle.label | "taint source" : String |
|
||||
| Tuples.cs:78:14:78:14 | access to local variable r [i] : String | semmle.label | access to local variable r [i] : String |
|
||||
| Tuples.cs:78:14:78:16 | access to property i | semmle.label | access to property i |
|
||||
| Tuples.cs:77:18:77:35 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
|
||||
| Tuples.cs:77:18:77:35 | (..., ...) [Item2, Item2] : String | semmle.label | (..., ...) [Item2, Item2] : String |
|
||||
| Tuples.cs:77:18:77:35 | (..., ...) [Item2] : String | semmle.label | (..., ...) [Item2] : String |
|
||||
| Tuples.cs:77:23:77:23 | SSA def(p) : String | semmle.label | SSA def(p) : String |
|
||||
| Tuples.cs:77:30:77:30 | SSA def(r) : String | semmle.label | SSA def(r) : String |
|
||||
| Tuples.cs:79:18:79:18 | access to local variable p | semmle.label | access to local variable p |
|
||||
| Tuples.cs:80:18:80:18 | access to local variable r | semmle.label | access to local variable r |
|
||||
| Tuples.cs:89:17:89:41 | object creation of type R1 [i] : String | semmle.label | object creation of type R1 [i] : String |
|
||||
| Tuples.cs:89:24:89:37 | "taint source" : String | semmle.label | "taint source" : String |
|
||||
| Tuples.cs:90:14:90:14 | access to local variable r [i] : String | semmle.label | access to local variable r [i] : String |
|
||||
| Tuples.cs:90:14:90:16 | access to property i | semmle.label | access to property i |
|
||||
#select
|
||||
| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:9:14:9:14 | access to local variable a | $@ | Tuples.cs:9:14:9:14 | access to local variable a | access to local variable a |
|
||||
| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:14:14:14:14 | access to local variable a | $@ | Tuples.cs:14:14:14:14 | access to local variable a | access to local variable a |
|
||||
@@ -159,8 +159,8 @@ nodes
|
||||
| Tuples.cs:39:48:39:61 | "taint source" : String | Tuples.cs:39:48:39:61 | "taint source" : String | Tuples.cs:40:14:40:20 | access to field Item1 | $@ | Tuples.cs:40:14:40:20 | access to field Item1 | access to field Item1 |
|
||||
| Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:54:22:54:28 | access to field Item1 | $@ | Tuples.cs:54:22:54:28 | access to field Item1 | access to field Item1 |
|
||||
| Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:59:22:59:22 | access to local variable a | $@ | Tuples.cs:59:22:59:22 | access to local variable a | access to local variable a |
|
||||
| Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:67:18:67:18 | access to local variable p | $@ | Tuples.cs:67:18:67:18 | access to local variable p | access to local variable p |
|
||||
| Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:79:18:79:18 | access to local variable p | $@ | Tuples.cs:79:18:79:18 | access to local variable p | access to local variable p |
|
||||
| Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:55:22:55:34 | access to field Item2 | $@ | Tuples.cs:55:22:55:34 | access to field Item2 | access to field Item2 |
|
||||
| Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:60:22:60:22 | access to local variable c | $@ | Tuples.cs:60:22:60:22 | access to local variable c | access to local variable c |
|
||||
| Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:68:18:68:18 | access to local variable r | $@ | Tuples.cs:68:18:68:18 | access to local variable r | access to local variable r |
|
||||
| Tuples.cs:77:24:77:37 | "taint source" : String | Tuples.cs:77:24:77:37 | "taint source" : String | Tuples.cs:78:14:78:16 | access to property i | $@ | Tuples.cs:78:14:78:16 | access to property i | access to property i |
|
||||
| Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:80:18:80:18 | access to local variable r | $@ | Tuples.cs:80:18:80:18 | access to local variable r | access to local variable r |
|
||||
| Tuples.cs:89:24:89:37 | "taint source" : String | Tuples.cs:89:24:89:37 | "taint source" : String | Tuples.cs:90:14:90:16 | access to property i | $@ | Tuples.cs:90:14:90:16 | access to property i | access to property i |
|
||||
|
||||
Reference in New Issue
Block a user