Merge pull request #5242 from tamasvajk/feature/tuple-df

C#: Add tuple dataflow
This commit is contained in:
Tamás Vajk
2021-03-16 11:45:11 +01:00
committed by GitHub
35 changed files with 1200 additions and 369 deletions

View File

@@ -0,0 +1,3 @@
lgtm,codescanning
* Data flow for tuples has been improved to track data flowing into and out of
tuple fields. Tuple extraction was changed to extract non-named tuple elements.

View File

@@ -12,11 +12,11 @@ namespace Semmle.Extraction.CSharp.Entities
internal class Expression : FreshEntity, IExpressionParentEntity
{
private readonly IExpressionInfo info;
public AnnotatedTypeSymbol? Type { get; }
public AnnotatedTypeSymbol? Type { get; private set; }
public Extraction.Entities.Location Location { get; }
public ExprKind Kind { get; }
internal Expression(IExpressionInfo info)
internal Expression(IExpressionInfo info, bool shouldPopulate = true)
: base(info.Context)
{
this.info = info;
@@ -24,7 +24,10 @@ namespace Semmle.Extraction.CSharp.Entities
Kind = info.Kind;
Type = info.Type;
TryPopulate();
if (shouldPopulate)
{
TryPopulate();
}
}
protected sealed override void Populate(TextWriter trapFile)
@@ -59,6 +62,14 @@ namespace Semmle.Extraction.CSharp.Entities
public override Location? ReportingLocation => Location.Symbol;
internal void SetType(ITypeSymbol? type)
{
if (type is not null)
{
Type = new AnnotatedTypeSymbol(type, type.NullableAnnotation);
}
}
bool IExpressionParentEntity.IsTopLevelParent => false;
/// <summary>

View File

@@ -3,7 +3,9 @@ using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Semmle.Extraction.CSharp.Populators;
using Semmle.Extraction.Kinds;
using Semmle.Extraction.Entities;
using System.Collections.Generic;
using System.Linq;
using System.Collections.Immutable;
namespace Semmle.Extraction.CSharp.Entities.Expressions
{
@@ -47,16 +49,17 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
/// Create a tuple expression representing a parenthesized variable declaration.
/// That is, we consider `var (x, y) = ...` to be equivalent to `(var x, var y) = ...`.
/// </summary>
public static Expression CreateParenthesized(Context cx, DeclarationExpressionSyntax node, ParenthesizedVariableDesignationSyntax designation, IExpressionParentEntity parent, int child)
public static Expression CreateParenthesized(Context cx, DeclarationExpressionSyntax node, ParenthesizedVariableDesignationSyntax designation, IExpressionParentEntity parent, int child, INamedTypeSymbol? t)
{
AnnotatedTypeSymbol? type = null; // Should ideally be a corresponding tuple type
var type = t is null ? (AnnotatedTypeSymbol?)null : new AnnotatedTypeSymbol(t, t.NullableAnnotation);
var tuple = new Expression(new ExpressionInfo(cx, type, cx.CreateLocation(node.GetLocation()), ExprKind.TUPLE, parent, child, false, null));
cx.Try(null, null, () =>
{
var child0 = 0;
foreach (var variable in designation.Variables)
Create(cx, node, variable, tuple, child0++);
for (var child0 = 0; child0 < designation.Variables.Count; child0++)
{
Create(cx, node, designation.Variables[child0], tuple, child0, t?.TypeArguments[child0] as INamedTypeSymbol);
}
});
return tuple;
@@ -64,18 +67,21 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
public static Expression CreateParenthesized(Context cx, VarPatternSyntax varPattern, ParenthesizedVariableDesignationSyntax designation, IExpressionParentEntity parent, int child)
{
AnnotatedTypeSymbol? type = null; // Should ideally be a corresponding tuple type
var tuple = new Expression(new ExpressionInfo(cx, type, cx.CreateLocation(varPattern.GetLocation()), ExprKind.TUPLE, parent, child, false, null));
var tuple = new Expression(
new ExpressionInfo(cx, null, cx.CreateLocation(varPattern.GetLocation()), ExprKind.TUPLE, parent, child, false, null),
shouldPopulate: false);
var elementTypes = new List<ITypeSymbol?>();
cx.Try(null, null, () =>
{
var child0 = 0;
foreach (var variable in designation.Variables)
{
Expression sub;
switch (variable)
{
case ParenthesizedVariableDesignationSyntax paren:
CreateParenthesized(cx, varPattern, paren, tuple, child0++);
sub = CreateParenthesized(cx, varPattern, paren, tuple, child0++);
break;
case SingleVariableDesignationSyntax single:
if (cx.GetModel(variable).GetDeclaredSymbol(single) is ILocalSymbol local)
@@ -83,6 +89,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
var decl = Create(cx, variable, local.GetAnnotatedType(), tuple, child0++);
var l = LocalVariable.Create(cx, local);
l.PopulateManual(decl, true);
sub = decl;
}
else
{
@@ -90,26 +97,43 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
}
break;
case DiscardDesignationSyntax discard:
new Discard(cx, discard, tuple, child0++);
sub = new Discard(cx, discard, tuple, child0++);
if (!sub.Type.HasValue || sub.Type.Value.Symbol is null)
{
// The type is only updated in memory, it will not be written to the trap file.
sub.SetType(cx.Compilation.GetSpecialType(SpecialType.System_Object));
}
break;
default:
throw new InternalError(variable, "Unhandled designation type");
}
elementTypes.Add(sub.Type.HasValue && sub.Type.Value.Symbol?.Kind != SymbolKind.ErrorType
? sub.Type.Value.Symbol
: null);
}
});
INamedTypeSymbol? tupleType = null;
if (!elementTypes.Any(et => et is null))
{
tupleType = cx.Compilation.CreateTupleTypeSymbol(elementTypes.ToImmutableArray()!);
}
tuple.SetType(tupleType);
tuple.TryPopulate();
return tuple;
}
private static Expression Create(Context cx, DeclarationExpressionSyntax node, VariableDesignationSyntax? designation, IExpressionParentEntity parent, int child)
private static Expression Create(Context cx, DeclarationExpressionSyntax node, VariableDesignationSyntax? designation, IExpressionParentEntity parent, int child, INamedTypeSymbol? declarationType)
{
switch (designation)
{
case SingleVariableDesignationSyntax single:
return CreateSingle(cx, node, single, parent, child);
case ParenthesizedVariableDesignationSyntax paren:
return CreateParenthesized(cx, node, paren, parent, child);
return CreateParenthesized(cx, node, paren, parent, child, declarationType);
case DiscardDesignationSyntax discard:
var type = cx.GetType(discard);
return Create(cx, node, type, parent, child);
@@ -120,7 +144,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
}
public static Expression Create(Context cx, DeclarationExpressionSyntax node, IExpressionParentEntity parent, int child) =>
Create(cx, node, node.Designation, parent, child);
Create(cx, node, node.Designation, parent, child, cx.GetTypeInfo(node).Type.DisambiguateType() as INamedTypeSymbol);
public static VariableDeclaration Create(Context cx, CSharpSyntaxNode c, AnnotatedTypeSymbol? type, IExpressionParentEntity parent, int child) =>
new VariableDeclaration(new ExpressionInfo(cx, type, cx.CreateLocation(c.FixedLocation()), ExprKind.LOCAL_VAR_DECL, parent, child, false, null));

View File

@@ -17,7 +17,7 @@ namespace Semmle.Extraction.CSharp.Entities
type = new Lazy<Type>(() => Entities.Type.Create(cx, Symbol.Type));
}
public static Field Create(Context cx, IFieldSymbol field) => FieldFactory.Instance.CreateEntityFromSymbol(cx, field);
public static Field Create(Context cx, IFieldSymbol field) => FieldFactory.Instance.CreateEntityFromSymbol(cx, field.CorrespondingTupleField ?? field);
// Do not populate backing fields.
// Populate Tuple fields.

View File

@@ -13,7 +13,7 @@ namespace Semmle.Extraction.CSharp.Entities
/// </summary>
internal class TupleType : Type<INamedTypeSymbol>
{
public static TupleType Create(Context cx, INamedTypeSymbol type) => TupleTypeFactory.Instance.CreateEntityFromSymbol(cx, type);
public static TupleType Create(Context cx, INamedTypeSymbol type) => TupleTypeFactory.Instance.CreateEntityFromSymbol(cx, type.TupleUnderlyingType ?? type);
private class TupleTypeFactory : CachedEntityFactory<INamedTypeSymbol, TupleType>
{
@@ -41,7 +41,7 @@ namespace Semmle.Extraction.CSharp.Entities
PopulateType(trapFile);
PopulateGenerics();
var underlyingType = NamedType.CreateNamedTypeFromTupleType(Context, Symbol.TupleUnderlyingType ?? Symbol);
var underlyingType = NamedType.CreateNamedTypeFromTupleType(Context, Symbol);
trapFile.tuple_underlying_type(this, underlyingType);

View File

@@ -295,7 +295,7 @@ namespace Semmle.Extraction.CSharp
trapFile.BuildList(",", named.TupleElements,
(f, tb0) =>
{
trapFile.Write(f.Name);
trapFile.Write((f.CorrespondingTupleField ?? f).Name);
trapFile.Write(":");
f.Type.BuildOrWriteId(cx, tb0, symbolBeingDefined, addBaseClass);
}

View File

@@ -13,7 +13,7 @@ namespace Semmle.Extraction
protected abstract void Populate(TextWriter trapFile);
protected void TryPopulate()
public void TryPopulate()
{
Context.Try(null, null, () => Populate(Context.TrapWriter.Writer));
}

View File

@@ -537,6 +537,9 @@ module AssignableDefinitions {
/** Gets the underlying assignment. */
AssignExpr getAssignment() { result = ae }
/** Gets the leaf expression. */
Expr getLeaf() { result = leaf }
/**
* Gets the evaluation order of this definition among the other definitions
* in the compound tuple assignment. For example, in `(x, (y, z)) = ...` the

View File

@@ -220,6 +220,16 @@ module LocalFlow {
e1 = we.getInitializer() and
e2 = we
)
or
scope = any(AssignExpr ae | ae.getLValue().(TupleExpr) = e2 and ae.getRValue() = e1) and
isSuccessor = false
or
isSuccessor = true and
exists(ControlFlowElement cfe | cfe = e2.(TupleExpr).(PatternExpr).getPatternMatch() |
cfe.(IsExpr).getExpr() = e1 and scope = cfe
or
exists(Switch sw | sw.getACase() = cfe and sw.getExpr() = e1 and scope = sw)
)
)
}
@@ -483,6 +493,18 @@ private predicate fieldOrPropertyStore(Expr e, Content c, Expr src, Expr q, bool
src = mi.getRValue() and
postUpdate = false
)
or
// Tuple element, `(..., src, ...)` `f` is `ItemX` of tuple `q`
e =
any(TupleExpr te |
exists(int i |
e = q and
src = te.getArgument(i) and
te.isConstruction() and
f = q.getType().(TupleType).getElement(i) and
postUpdate = false
)
)
)
}
@@ -495,7 +517,7 @@ private predicate overridesOrImplementsSourceDecl(Property p1, Property p2) {
/**
* Holds if `e2` is an expression that reads field or property `c` from
* expresion `e1`. This takes overriding into account for properties written
* expression `e1`. This takes overriding into account for properties written
* from library code.
*/
private predicate fieldOrPropertyRead(Expr e1, Content c, FieldOrPropertyRead e2) {
@@ -792,6 +814,37 @@ private module Cached {
hasNodePath(x, node1, node2) and
node2.asExpr().(AwaitExpr).getExpr() = node1.asExpr() and
c = getResultContent()
or
// node1 = (..., node2, ...)
// node1.ItemX flows to node2
exists(TupleExpr te, int i, Expr item |
te = node1.asExpr() and
not te.isConstruction() and
c.(FieldContent).getField() = te.getType().(TupleType).getElement(i).getUnboundDeclaration() and
// node1 = (..., item, ...)
te.getArgument(i) = item
|
// item = (..., ..., ...) in node1 = (..., (..., ..., ...), ...)
node2.asExpr().(TupleExpr) = item and
hasNodePath(x, node1, node2)
or
// item = variable in node1 = (..., variable, ...)
exists(AssignableDefinitions::TupleAssignmentDefinition tad, Ssa::ExplicitDefinition def |
node2.(SsaDefinitionNode).getDefinition() = def and
def.getADefinition() = tad and
tad.getLeaf() = item and
hasNodePath(x, node1, node2)
)
or
// item = variable in node1 = (..., variable, ...) in a case/is var (..., ...)
te = any(PatternExpr pe).getAChildExpr*() and
exists(AssignableDefinitions::LocalVariableDefinition lvd, Ssa::ExplicitDefinition def |
node2.(SsaDefinitionNode).getDefinition() = def and
def.getADefinition() = lvd and
lvd.getDeclaration() = item and
hasNodePath(x, node1, node2)
)
)
)
or
FlowSummaryImpl::Private::readStep(node1, c, node2)
@@ -1731,6 +1784,11 @@ private class ReadStepConfiguration extends ControlFlowReachabilityConfiguration
e1 = e2.(AwaitExpr).getExpr() and
scope = e2 and
isSuccessor = true
or
exactScope = false and
e2 = e1.(TupleExpr).getAnArgument() and
scope = e1 and
isSuccessor = false
}
override predicate candidateDef(
@@ -1752,6 +1810,22 @@ private class ReadStepConfiguration extends ControlFlowReachabilityConfiguration
scope = fs.getVariableDeclExpr() and
exactScope = false
)
or
scope =
any(AssignExpr ae |
ae = defTo.(AssignableDefinitions::TupleAssignmentDefinition).getAssignment() and
e = ae.getLValue().getAChildExpr*().(TupleExpr) and
exactScope = false and
isSuccessor = true
)
or
scope =
any(TupleExpr te |
te.getAnArgument() = defTo.(AssignableDefinitions::LocalVariableDefinition).getDeclaration() and
e = te and
exactScope = false and
isSuccessor = false
)
}
}

View File

@@ -62,25 +62,9 @@ private class LocalTaintExprStepConfiguration extends ControlFlowReachabilityCon
e1 = e2.(BinaryLogicalOperation).getAnOperand() and
scope = e2
or
// Taint from tuple argument
e2 =
any(TupleExpr te |
e1 = te.getAnArgument() and
te.isReadAccess() and
scope = e2
)
or
e1 = e2.(InterpolatedStringExpr).getAChild() and
scope = e2
or
// Taint from tuple expression
e2 =
any(MemberAccess ma |
ma.getQualifier().getType() instanceof TupleType and
e1 = ma.getQualifier() and
scope = e2
)
or
e2 =
any(OperatorCall oc |
oc.getTarget().(ConversionOperator).fromLibrary() and

View File

@@ -1035,7 +1035,13 @@ class TupleExpr extends Expr, @tuple_expr {
Expr getAnArgument() { result = getArgument(_) }
/** Holds if this tuple is a read access. */
predicate isReadAccess() { not this = getAnAssignOrForeachChild() }
deprecated predicate isReadAccess() { not this = getAnAssignOrForeachChild() }
/** Holds if this expression is a tuple construction. */
predicate isConstruction() {
not this = getAnAssignOrForeachChild() and
not this = any(PatternExpr pe).getAChildExpr*()
}
override string getAPrimaryQlClass() { result = "TupleExpr" }
}

View File

@@ -39,39 +39,12 @@
| Assignables.cs:78:22:78:22 | s |
| Assignables.cs:82:21:82:24 | temp |
| Assignables.cs:84:30:84:30 | e |
| Assignables.cs:92:10:92:14 | Item1 |
| Assignables.cs:92:10:92:14 | x |
| Assignables.cs:92:14:92:14 | x |
| Assignables.cs:92:17:92:34 | Item2 |
| Assignables.cs:92:18:92:23 | Item1 |
| Assignables.cs:92:18:92:23 | b |
| Assignables.cs:92:23:92:23 | b |
| Assignables.cs:92:26:92:33 | Item2 |
| Assignables.cs:92:26:92:33 | s |
| Assignables.cs:92:33:92:33 | s |
| Assignables.cs:95:14:95:15 | Item1 |
| Assignables.cs:95:14:95:15 | f1 |
| Assignables.cs:95:18:95:37 | Item2 |
| Assignables.cs:95:24:95:25 | Item1 |
| Assignables.cs:95:24:95:25 | f1 |
| Assignables.cs:95:35:95:36 | Item2 |
| Assignables.cs:95:35:95:36 | f3 |
| Assignables.cs:95:40:95:44 | tuple |
| Assignables.cs:96:10:96:17 | Item1 |
| Assignables.cs:96:10:96:17 | Property |
| Assignables.cs:96:20:96:26 | Item2 |
| Assignables.cs:97:10:97:10 | Item1 |
| Assignables.cs:97:10:97:10 | x |
| Assignables.cs:97:13:97:18 | Item2 |
| Assignables.cs:97:14:97:14 | Item1 |
| Assignables.cs:97:14:97:14 | b |
| Assignables.cs:97:17:97:17 | Item2 |
| Assignables.cs:97:17:97:17 | x |
| Assignables.cs:97:24:97:24 | Item1 |
| Assignables.cs:97:27:97:36 | Item2 |
| Assignables.cs:98:10:98:10 | Item1 |
| Assignables.cs:98:10:98:10 | b |
| Assignables.cs:98:13:98:18 | Item2 |
| Assignables.cs:101:6:101:8 | Item1 |
| Assignables.cs:101:11:101:24 | Item2 |
| Assignables.cs:101:12:101:15 | Item1 |
@@ -99,13 +72,7 @@
| Discards.cs:5:6:5:8 | Item1 |
| Discards.cs:5:11:5:16 | Item2 |
| Discards.cs:5:30:5:30 | x |
| Discards.cs:19:10:19:14 | Item1 |
| Discards.cs:19:10:19:14 | x |
| Discards.cs:19:14:19:14 | x |
| Discards.cs:19:17:19:17 | Item2 |
| Discards.cs:20:10:20:10 | Item1 |
| Discards.cs:20:13:20:17 | Item2 |
| Discards.cs:20:13:20:17 | y |
| Discards.cs:20:17:20:17 | y |
| Discards.cs:20:32:20:32 | z |
| Discards.cs:23:27:23:30 | args |

View File

@@ -1,5 +1,40 @@
| CSharp7.cs:41:13:41:21 | "tainted" | CSharp7.cs:53:18:53:19 | access to local variable t1 |
| CSharp7.cs:57:11:57:19 | "tainted" | CSharp7.cs:58:18:58:19 | access to local variable t4 |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:177:22:177:30 | "tainted" |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:183:21:183:26 | call to local function g |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:184:21:184:26 | call to local function h |
edges
| CSharp7.cs:41:9:41:21 | SSA def(x) : String | CSharp7.cs:51:22:51:23 | SSA def(t1) : String |
| CSharp7.cs:41:13:41:21 | "tainted" : String | CSharp7.cs:41:9:41:21 | SSA def(x) : String |
| CSharp7.cs:51:22:51:23 | SSA def(t1) : String | CSharp7.cs:53:18:53:19 | access to local variable t1 |
| CSharp7.cs:57:11:57:19 | "tainted" : String | CSharp7.cs:57:30:57:31 | SSA def(t4) : String |
| CSharp7.cs:57:30:57:31 | SSA def(t4) : String | CSharp7.cs:58:18:58:19 | access to local variable t4 |
| CSharp7.cs:89:18:89:34 | (..., ...) [Item1] : String | CSharp7.cs:92:20:92:21 | access to local variable t1 [Item1] : String |
| CSharp7.cs:89:19:89:27 | "tainted" : String | CSharp7.cs:89:18:89:34 | (..., ...) [Item1] : String |
| CSharp7.cs:92:20:92:21 | access to local variable t1 [Item1] : String | CSharp7.cs:92:20:92:27 | access to field Item1 : String |
| CSharp7.cs:92:20:92:27 | access to field Item1 : String | CSharp7.cs:92:18:92:28 | call to method I |
| CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:183:23:183:25 | access to local variable src : String |
| CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:184:23:184:25 | access to local variable src : String |
| CSharp7.cs:183:23:183:25 | access to local variable src : String | CSharp7.cs:183:21:183:26 | call to local function g |
| CSharp7.cs:184:23:184:25 | access to local variable src : String | CSharp7.cs:184:21:184:26 | call to local function h |
nodes
| CSharp7.cs:41:9:41:21 | SSA def(x) : String | semmle.label | SSA def(x) : String |
| CSharp7.cs:41:13:41:21 | "tainted" : String | semmle.label | "tainted" : String |
| CSharp7.cs:51:22:51:23 | SSA def(t1) : String | semmle.label | SSA def(t1) : String |
| CSharp7.cs:53:18:53:19 | access to local variable t1 | semmle.label | access to local variable t1 |
| CSharp7.cs:57:11:57:19 | "tainted" : String | semmle.label | "tainted" : String |
| CSharp7.cs:57:30:57:31 | SSA def(t4) : String | semmle.label | SSA def(t4) : String |
| CSharp7.cs:58:18:58:19 | access to local variable t4 | semmle.label | access to local variable t4 |
| CSharp7.cs:89:18:89:34 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
| CSharp7.cs:89:19:89:27 | "tainted" : String | semmle.label | "tainted" : String |
| CSharp7.cs:92:18:92:28 | call to method I | semmle.label | call to method I |
| CSharp7.cs:92:20:92:21 | access to local variable t1 [Item1] : String | semmle.label | access to local variable t1 [Item1] : String |
| CSharp7.cs:92:20:92:27 | access to field Item1 : String | semmle.label | access to field Item1 : String |
| CSharp7.cs:177:22:177:30 | "tainted" | semmle.label | "tainted" |
| CSharp7.cs:177:22:177:30 | "tainted" : String | semmle.label | "tainted" : String |
| CSharp7.cs:183:21:183:26 | call to local function g | semmle.label | call to local function g |
| CSharp7.cs:183:23:183:25 | access to local variable src : String | semmle.label | access to local variable src : String |
| CSharp7.cs:184:21:184:26 | call to local function h | semmle.label | call to local function h |
| CSharp7.cs:184:23:184:25 | access to local variable src : String | semmle.label | access to local variable src : String |
#select
| CSharp7.cs:41:13:41:21 | "tainted" : String | CSharp7.cs:41:13:41:21 | "tainted" : String | CSharp7.cs:53:18:53:19 | access to local variable t1 | $@ | CSharp7.cs:53:18:53:19 | access to local variable t1 | access to local variable t1 |
| CSharp7.cs:57:11:57:19 | "tainted" : String | CSharp7.cs:57:11:57:19 | "tainted" : String | CSharp7.cs:58:18:58:19 | access to local variable t4 | $@ | CSharp7.cs:58:18:58:19 | access to local variable t4 | access to local variable t4 |
| CSharp7.cs:89:19:89:27 | "tainted" : String | CSharp7.cs:89:19:89:27 | "tainted" : String | CSharp7.cs:92:18:92:28 | call to method I | $@ | CSharp7.cs:92:18:92:28 | call to method I | call to method I |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:177:22:177:30 | "tainted" | $@ | CSharp7.cs:177:22:177:30 | "tainted" | "tainted" |
| CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:183:21:183:26 | call to local function g | $@ | CSharp7.cs:183:21:183:26 | call to local function g | call to local function g |
| CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:184:21:184:26 | call to local function h | $@ | CSharp7.cs:184:21:184:26 | call to local function h | call to local function h |

View File

@@ -1,4 +1,9 @@
/**
* @kind path-problem
*/
import csharp
import DataFlow::PathGraph
class DataflowConfiguration extends DataFlow::Configuration {
DataflowConfiguration() { this = "data flow configuration" }
@@ -12,6 +17,6 @@ class DataflowConfiguration extends DataFlow::Configuration {
}
}
from DataflowConfiguration config, DataFlow::Node source, DataFlow::Node sink
where config.hasFlow(source, sink)
select source, sink
from DataFlow::PathNode source, DataFlow::PathNode sink, DataflowConfiguration conf
where conf.hasFlowPath(source, sink)
select source, source, sink, "$@", sink, sink.toString()

View File

@@ -1,8 +1,45 @@
| CSharp7.cs:41:13:41:21 | "tainted" | CSharp7.cs:53:18:53:19 | access to local variable t1 |
| CSharp7.cs:57:11:57:19 | "tainted" | CSharp7.cs:58:18:58:19 | access to local variable t4 |
| CSharp7.cs:89:19:89:27 | "tainted" | CSharp7.cs:89:18:89:34 | (..., ...) |
| CSharp7.cs:89:19:89:27 | "tainted" | CSharp7.cs:92:18:92:28 | call to method I |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:177:22:177:30 | "tainted" |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:182:21:182:26 | call to local function f |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:183:21:183:26 | call to local function g |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:184:21:184:26 | call to local function h |
edges
| CSharp7.cs:41:9:41:21 | SSA def(x) : String | CSharp7.cs:51:22:51:23 | SSA def(t1) : String |
| CSharp7.cs:41:13:41:21 | "tainted" : String | CSharp7.cs:41:9:41:21 | SSA def(x) : String |
| CSharp7.cs:51:22:51:23 | SSA def(t1) : String | CSharp7.cs:53:18:53:19 | access to local variable t1 |
| CSharp7.cs:57:11:57:19 | "tainted" : String | CSharp7.cs:57:30:57:31 | SSA def(t4) : String |
| CSharp7.cs:57:30:57:31 | SSA def(t4) : String | CSharp7.cs:58:18:58:19 | access to local variable t4 |
| CSharp7.cs:89:18:89:34 | (..., ...) [Item1] : String | CSharp7.cs:92:20:92:21 | access to local variable t1 [Item1] : String |
| CSharp7.cs:89:19:89:27 | "tainted" : String | CSharp7.cs:89:18:89:34 | (..., ...) [Item1] : String |
| CSharp7.cs:92:20:92:21 | access to local variable t1 [Item1] : String | CSharp7.cs:92:20:92:27 | access to field Item1 : String |
| CSharp7.cs:92:20:92:27 | access to field Item1 : String | CSharp7.cs:92:18:92:28 | call to method I |
| CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:182:23:182:25 | access to local variable src : String |
| CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:183:23:183:25 | access to local variable src : String |
| CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:184:23:184:25 | access to local variable src : String |
| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:182:21:182:26 | call to local function f |
| CSharp7.cs:183:23:183:25 | access to local variable src : String | CSharp7.cs:183:21:183:26 | call to local function g |
| CSharp7.cs:184:23:184:25 | access to local variable src : String | CSharp7.cs:184:21:184:26 | call to local function h |
nodes
| CSharp7.cs:41:9:41:21 | SSA def(x) : String | semmle.label | SSA def(x) : String |
| CSharp7.cs:41:13:41:21 | "tainted" : String | semmle.label | "tainted" : String |
| CSharp7.cs:51:22:51:23 | SSA def(t1) : String | semmle.label | SSA def(t1) : String |
| CSharp7.cs:53:18:53:19 | access to local variable t1 | semmle.label | access to local variable t1 |
| CSharp7.cs:57:11:57:19 | "tainted" : String | semmle.label | "tainted" : String |
| CSharp7.cs:57:30:57:31 | SSA def(t4) : String | semmle.label | SSA def(t4) : String |
| CSharp7.cs:58:18:58:19 | access to local variable t4 | semmle.label | access to local variable t4 |
| CSharp7.cs:89:18:89:34 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
| CSharp7.cs:89:19:89:27 | "tainted" : String | semmle.label | "tainted" : String |
| CSharp7.cs:92:18:92:28 | call to method I | semmle.label | call to method I |
| CSharp7.cs:92:20:92:21 | access to local variable t1 [Item1] : String | semmle.label | access to local variable t1 [Item1] : String |
| CSharp7.cs:92:20:92:27 | access to field Item1 : String | semmle.label | access to field Item1 : String |
| CSharp7.cs:177:22:177:30 | "tainted" | semmle.label | "tainted" |
| CSharp7.cs:177:22:177:30 | "tainted" : String | semmle.label | "tainted" : String |
| CSharp7.cs:182:21:182:26 | call to local function f | semmle.label | call to local function f |
| CSharp7.cs:182:23:182:25 | access to local variable src : String | semmle.label | access to local variable src : String |
| CSharp7.cs:183:21:183:26 | call to local function g | semmle.label | call to local function g |
| CSharp7.cs:183:23:183:25 | access to local variable src : String | semmle.label | access to local variable src : String |
| CSharp7.cs:184:21:184:26 | call to local function h | semmle.label | call to local function h |
| CSharp7.cs:184:23:184:25 | access to local variable src : String | semmle.label | access to local variable src : String |
#select
| CSharp7.cs:41:13:41:21 | "tainted" : String | CSharp7.cs:41:13:41:21 | "tainted" : String | CSharp7.cs:53:18:53:19 | access to local variable t1 | $@ | CSharp7.cs:53:18:53:19 | access to local variable t1 | access to local variable t1 |
| CSharp7.cs:57:11:57:19 | "tainted" : String | CSharp7.cs:57:11:57:19 | "tainted" : String | CSharp7.cs:58:18:58:19 | access to local variable t4 | $@ | CSharp7.cs:58:18:58:19 | access to local variable t4 | access to local variable t4 |
| CSharp7.cs:89:19:89:27 | "tainted" : String | CSharp7.cs:89:19:89:27 | "tainted" : String | CSharp7.cs:92:18:92:28 | call to method I | $@ | CSharp7.cs:92:18:92:28 | call to method I | call to method I |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:177:22:177:30 | "tainted" | $@ | CSharp7.cs:177:22:177:30 | "tainted" | "tainted" |
| CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:182:21:182:26 | call to local function f | $@ | CSharp7.cs:182:21:182:26 | call to local function f | call to local function f |
| CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:183:21:183:26 | call to local function g | $@ | CSharp7.cs:183:21:183:26 | call to local function g | call to local function g |
| CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:177:22:177:30 | "tainted" : String | CSharp7.cs:184:21:184:26 | call to local function h | $@ | CSharp7.cs:184:21:184:26 | call to local function h | call to local function h |

View File

@@ -1,4 +1,9 @@
/**
* @kind path-problem
*/
import csharp
import DataFlow::PathGraph
class DataflowConfiguration extends TaintTracking::Configuration {
DataflowConfiguration() { this = "taint tracking configuration" }
@@ -12,6 +17,6 @@ class DataflowConfiguration extends TaintTracking::Configuration {
}
}
from DataflowConfiguration config, DataFlow::Node source, DataFlow::Node sink
where config.hasFlow(source, sink)
select source, sink
from DataFlow::PathNode source, DataFlow::PathNode sink, DataflowConfiguration conf
where conf.hasFlowPath(source, sink)
select source, source, sink, "$@", sink, sink.toString()

View File

@@ -30,89 +30,55 @@
| CSharp7.cs:54:9:54:17 | this access | CSharp7.cs:57:9:57:32 | this access |
| CSharp7.cs:54:15:54:16 | SSA def(t1) | CSharp7.cs:55:14:55:15 | access to local variable t1 |
| CSharp7.cs:57:30:57:31 | SSA def(t4) | CSharp7.cs:58:18:58:19 | access to local variable t4 |
| CSharp7.cs:66:20:66:20 | 1 | CSharp7.cs:66:16:66:27 | (..., ...) |
| CSharp7.cs:66:26:66:26 | 2 | CSharp7.cs:66:16:66:27 | (..., ...) |
| CSharp7.cs:69:10:69:20 | this | CSharp7.cs:71:26:71:28 | this access |
| CSharp7.cs:71:26:71:28 | [post] this access | CSharp7.cs:72:17:72:19 | this access |
| CSharp7.cs:71:26:71:28 | call to method F | CSharp7.cs:71:9:71:22 | (..., ...) |
| CSharp7.cs:71:26:71:28 | this access | CSharp7.cs:72:17:72:19 | this access |
| CSharp7.cs:72:13:72:19 | SSA def(z) | CSharp7.cs:75:16:75:16 | access to local variable z |
| CSharp7.cs:72:17:72:19 | [post] this access | CSharp7.cs:73:18:73:20 | this access |
| CSharp7.cs:72:17:72:19 | call to method F | CSharp7.cs:72:13:72:19 | SSA def(z) |
| CSharp7.cs:72:17:72:19 | this access | CSharp7.cs:73:18:73:20 | this access |
| CSharp7.cs:73:18:73:20 | [post] this access | CSharp7.cs:74:13:74:15 | this access |
| CSharp7.cs:73:18:73:20 | call to method F | CSharp7.cs:73:9:73:14 | (..., ...) |
| CSharp7.cs:73:18:73:20 | this access | CSharp7.cs:74:13:74:15 | this access |
| CSharp7.cs:74:13:74:15 | call to method F | CSharp7.cs:74:13:74:17 | access to field A |
| CSharp7.cs:75:16:75:16 | [post] access to local variable z | CSharp7.cs:77:39:77:39 | access to local variable z |
| CSharp7.cs:75:16:75:16 | access to local variable z | CSharp7.cs:77:39:77:39 | access to local variable z |
| CSharp7.cs:75:28:75:28 | 1 | CSharp7.cs:75:27:75:35 | (..., ...) |
| CSharp7.cs:75:31:75:31 | 2 | CSharp7.cs:75:27:75:35 | (..., ...) |
| CSharp7.cs:75:34:75:34 | 3 | CSharp7.cs:75:27:75:35 | (..., ...) |
| CSharp7.cs:75:27:75:35 | (..., ...) | CSharp7.cs:75:9:75:23 | (..., ...) |
| CSharp7.cs:76:9:76:32 | SSA def(x) | CSharp7.cs:79:27:79:27 | access to local variable x |
| CSharp7.cs:76:18:76:32 | ... = ... | CSharp7.cs:76:9:76:14 | (..., ...) |
| CSharp7.cs:76:27:76:32 | (..., ...) | CSharp7.cs:76:18:76:23 | (..., ...) |
| CSharp7.cs:76:27:76:32 | (..., ...) | CSharp7.cs:76:18:76:32 | ... = ... |
| CSharp7.cs:76:28:76:28 | 1 | CSharp7.cs:76:27:76:32 | (..., ...) |
| CSharp7.cs:76:31:76:31 | 2 | CSharp7.cs:76:27:76:32 | (..., ...) |
| CSharp7.cs:77:9:77:40 | SSA def(a) | CSharp7.cs:78:31:78:31 | access to local variable a |
| CSharp7.cs:77:9:77:40 | SSA def(b) | CSharp7.cs:78:24:78:24 | access to local variable b |
| CSharp7.cs:77:9:77:40 | SSA def(c) | CSharp7.cs:78:28:78:28 | access to local variable c |
| CSharp7.cs:77:35:77:40 | (..., ...) | CSharp7.cs:77:9:77:31 | (..., ...) |
| CSharp7.cs:77:36:77:36 | 1 | CSharp7.cs:77:9:77:40 | SSA def(a) |
| CSharp7.cs:77:36:77:36 | 1 | CSharp7.cs:77:35:77:40 | (..., ...) |
| CSharp7.cs:77:39:77:39 | access to local variable z | CSharp7.cs:77:35:77:40 | (..., ...) |
| CSharp7.cs:78:24:78:24 | access to local variable b | CSharp7.cs:78:23:78:33 | (..., ...) |
| CSharp7.cs:78:27:78:32 | (..., ...) | CSharp7.cs:78:23:78:33 | (..., ...) |
| CSharp7.cs:78:28:78:28 | access to local variable c | CSharp7.cs:78:27:78:32 | (..., ...) |
| CSharp7.cs:78:31:78:31 | access to local variable a | CSharp7.cs:78:27:78:32 | (..., ...) |
| CSharp7.cs:79:23:79:24 | "" | CSharp7.cs:79:22:79:28 | (..., ...) |
| CSharp7.cs:79:27:79:27 | access to local variable x | CSharp7.cs:79:22:79:28 | (..., ...) |
| CSharp7.cs:78:23:78:33 | (..., ...) | CSharp7.cs:78:9:78:19 | (..., ...) |
| CSharp7.cs:79:22:79:28 | (..., ...) | CSharp7.cs:79:9:79:18 | (..., ...) |
| CSharp7.cs:82:21:82:21 | x | CSharp7.cs:84:20:84:20 | access to parameter x |
| CSharp7.cs:84:16:84:24 | (..., ...) | CSharp7.cs:84:16:84:26 | access to field a |
| CSharp7.cs:84:20:84:20 | access to parameter x | CSharp7.cs:84:16:84:24 | (..., ...) |
| CSharp7.cs:84:23:84:23 | 2 | CSharp7.cs:84:16:84:24 | (..., ...) |
| CSharp7.cs:87:10:87:18 | this | CSharp7.cs:92:18:92:28 | this access |
| CSharp7.cs:89:13:89:34 | SSA def(t1) | CSharp7.cs:90:28:90:29 | access to local variable t1 |
| CSharp7.cs:89:13:89:34 | SSA qualifier def(t1.Item1) | CSharp7.cs:92:20:92:27 | access to field Item1 |
| CSharp7.cs:89:18:89:34 | (..., ...) | CSharp7.cs:89:13:89:34 | SSA def(t1) |
| CSharp7.cs:89:19:89:27 | "tainted" | CSharp7.cs:89:18:89:34 | (..., ...) |
| CSharp7.cs:89:30:89:33 | "X2" | CSharp7.cs:89:18:89:34 | (..., ...) |
| CSharp7.cs:90:9:90:29 | SSA def(t3) | CSharp7.cs:91:18:91:19 | access to local variable t3 |
| CSharp7.cs:90:28:90:29 | access to local variable t1 | CSharp7.cs:90:9:90:24 | (..., ...) |
| CSharp7.cs:90:28:90:29 | access to local variable t1 | CSharp7.cs:92:20:92:21 | access to local variable t1 |
| CSharp7.cs:92:20:92:21 | access to local variable t1 | CSharp7.cs:92:20:92:27 | access to field Item1 |
| CSharp7.cs:97:19:97:19 | 1 | CSharp7.cs:97:18:97:38 | (..., ...) |
| CSharp7.cs:97:22:97:37 | "TupleExprNode1" | CSharp7.cs:97:18:97:38 | (..., ...) |
| CSharp7.cs:98:19:98:19 | 1 | CSharp7.cs:98:18:98:43 | (..., ...) |
| CSharp7.cs:98:22:98:42 | (..., ...) | CSharp7.cs:98:18:98:43 | (..., ...) |
| CSharp7.cs:98:23:98:38 | "TupleExprNode2" | CSharp7.cs:98:22:98:42 | (..., ...) |
| CSharp7.cs:98:41:98:41 | 2 | CSharp7.cs:98:22:98:42 | (..., ...) |
| CSharp7.cs:103:18:103:42 | (..., ...) | CSharp7.cs:103:18:103:48 | access to field Item1 |
| CSharp7.cs:103:19:103:38 | "TupleMemberAccess1" | CSharp7.cs:103:18:103:42 | (..., ...) |
| CSharp7.cs:103:41:103:41 | 0 | CSharp7.cs:103:18:103:42 | (..., ...) |
| CSharp7.cs:104:18:104:47 | (..., ...) | CSharp7.cs:104:18:104:53 | access to field Item2 |
| CSharp7.cs:104:19:104:19 | 0 | CSharp7.cs:104:18:104:47 | (..., ...) |
| CSharp7.cs:104:22:104:46 | (..., ...) | CSharp7.cs:104:18:104:47 | (..., ...) |
| CSharp7.cs:104:23:104:42 | "TupleMemberAccess2" | CSharp7.cs:104:22:104:46 | (..., ...) |
| CSharp7.cs:104:45:104:45 | 1 | CSharp7.cs:104:22:104:46 | (..., ...) |
| CSharp7.cs:109:9:109:46 | SSA def(m1) | CSharp7.cs:112:27:112:28 | access to local variable m1 |
| CSharp7.cs:109:9:109:46 | SSA def(m2) | CSharp7.cs:112:31:112:32 | access to local variable m2 |
| CSharp7.cs:109:28:109:46 | (..., ...) | CSharp7.cs:109:9:109:24 | (..., ...) |
| CSharp7.cs:109:29:109:37 | "DefUse1" | CSharp7.cs:109:9:109:46 | SSA def(m1) |
| CSharp7.cs:109:29:109:37 | "DefUse1" | CSharp7.cs:109:28:109:46 | (..., ...) |
| CSharp7.cs:109:40:109:45 | (..., ...) | CSharp7.cs:109:9:109:46 | SSA def(m2) |
| CSharp7.cs:109:40:109:45 | (..., ...) | CSharp7.cs:109:28:109:46 | (..., ...) |
| CSharp7.cs:109:41:109:41 | 0 | CSharp7.cs:109:40:109:45 | (..., ...) |
| CSharp7.cs:109:44:109:44 | 1 | CSharp7.cs:109:40:109:45 | (..., ...) |
| CSharp7.cs:112:9:112:33 | SSA def(m4) | CSharp7.cs:113:18:113:19 | access to local variable m4 |
| CSharp7.cs:112:27:112:28 | access to local variable m1 | CSharp7.cs:112:26:112:33 | (..., ...) |
| CSharp7.cs:112:31:112:32 | access to local variable m2 | CSharp7.cs:112:26:112:33 | (..., ...) |
| CSharp7.cs:112:26:112:33 | (..., ...) | CSharp7.cs:112:9:112:22 | (..., ...) |
| CSharp7.cs:114:9:114:67 | SSA def(m9) | CSharp7.cs:115:19:115:20 | access to local variable m9 |
| CSharp7.cs:114:38:114:67 | ... = ... | CSharp7.cs:114:9:114:34 | (..., ...) |
| CSharp7.cs:114:38:114:67 | SSA def(m2) | CSharp7.cs:118:9:118:10 | access to local variable m2 |
| CSharp7.cs:114:38:114:67 | SSA qualifier def(m2.Item1) | CSharp7.cs:119:19:119:26 | access to field Item1 |
| CSharp7.cs:114:49:114:67 | (..., ...) | CSharp7.cs:114:38:114:45 | (..., ...) |
| CSharp7.cs:114:49:114:67 | (..., ...) | CSharp7.cs:114:38:114:67 | ... = ... |
| CSharp7.cs:114:50:114:58 | "DefUse2" | CSharp7.cs:114:49:114:67 | (..., ...) |
| CSharp7.cs:114:61:114:66 | (..., ...) | CSharp7.cs:114:38:114:67 | SSA def(m2) |
| CSharp7.cs:114:61:114:66 | (..., ...) | CSharp7.cs:114:49:114:67 | (..., ...) |
| CSharp7.cs:114:62:114:62 | 0 | CSharp7.cs:114:61:114:66 | (..., ...) |
| CSharp7.cs:114:65:114:65 | 1 | CSharp7.cs:114:61:114:66 | (..., ...) |
| CSharp7.cs:118:9:118:10 | [post] access to local variable m2 | CSharp7.cs:119:19:119:20 | access to local variable m2 |
| CSharp7.cs:118:9:118:10 | access to local variable m2 | CSharp7.cs:119:19:119:20 | access to local variable m2 |
| CSharp7.cs:119:19:119:20 | access to local variable m2 | CSharp7.cs:119:19:119:26 | access to field Item1 |
| CSharp7.cs:123:28:123:36 | "DefUse3" | CSharp7.cs:123:22:123:36 | ... = ... |
| CSharp7.cs:129:9:129:12 | this | CSharp7.cs:135:24:135:25 | this access |
| CSharp7.cs:131:20:131:20 | x | CSharp7.cs:131:32:131:32 | access to parameter x |
@@ -180,15 +146,16 @@
| CSharp7.cs:204:24:204:24 | p | CSharp7.cs:207:20:207:20 | access to parameter p |
| CSharp7.cs:206:28:206:28 | q | CSharp7.cs:206:44:206:44 | access to parameter q |
| CSharp7.cs:217:13:217:17 | false | CSharp7.cs:217:9:217:17 | SSA def(x) |
| CSharp7.cs:218:17:218:17 | 0 | CSharp7.cs:218:16:218:23 | (..., ...) |
| CSharp7.cs:218:20:218:22 | 0 | CSharp7.cs:218:16:218:23 | (..., ...) |
| CSharp7.cs:221:10:221:13 | this | CSharp7.cs:223:13:223:20 | this access |
| CSharp7.cs:223:13:223:20 | [post] this access | CSharp7.cs:224:18:224:25 | this access |
| CSharp7.cs:223:13:223:20 | this access | CSharp7.cs:224:18:224:25 | this access |
| CSharp7.cs:224:18:224:25 | [post] this access | CSharp7.cs:225:22:225:29 | this access |
| CSharp7.cs:224:18:224:25 | call to method f | CSharp7.cs:224:9:224:14 | (..., ...) |
| CSharp7.cs:224:18:224:25 | this access | CSharp7.cs:225:22:225:29 | this access |
| CSharp7.cs:225:22:225:29 | [post] this access | CSharp7.cs:226:22:226:33 | this access |
| CSharp7.cs:225:22:225:29 | call to method f | CSharp7.cs:225:9:225:18 | (..., ...) |
| CSharp7.cs:225:22:225:29 | this access | CSharp7.cs:226:22:226:33 | this access |
| CSharp7.cs:226:22:226:33 | call to method f | CSharp7.cs:226:9:226:18 | (..., ...) |
| CSharp7.cs:234:16:234:23 | SSA def(o) | CSharp7.cs:235:13:235:13 | access to local variable o |
| CSharp7.cs:234:20:234:23 | null | CSharp7.cs:234:16:234:23 | SSA def(o) |
| CSharp7.cs:235:13:235:13 | access to local variable o | CSharp7.cs:235:18:235:23 | SSA def(i1) |
@@ -240,8 +207,6 @@
| CSharp7.cs:285:20:285:62 | call to method Select | CSharp7.cs:285:13:285:62 | SSA def(list) |
| CSharp7.cs:285:32:285:35 | item | CSharp7.cs:285:41:285:44 | access to parameter item |
| CSharp7.cs:285:41:285:44 | access to parameter item | CSharp7.cs:285:51:285:54 | access to parameter item |
| CSharp7.cs:285:41:285:48 | access to property Key | CSharp7.cs:285:40:285:61 | (..., ...) |
| CSharp7.cs:285:51:285:60 | access to property Value | CSharp7.cs:285:40:285:61 | (..., ...) |
| CSharp7.cs:287:39:287:42 | access to local variable list | CSharp7.cs:289:36:289:39 | access to local variable list |
| CSharp7.cs:289:36:289:39 | access to local variable list | CSharp7.cs:291:32:291:35 | access to local variable list |
| CSharp7.cs:299:18:299:22 | SSA def(x) | CSharp7.cs:299:25:299:25 | SSA phi(x) |

View File

@@ -156,7 +156,7 @@ CSharp7.cs:
# 74| 3: [ExprStmt] ...;
# 74| 0: [AssignExpr] ... = ...
# 74| 0: [LocalVariableAccess] access to local variable x
# 74| 1: [FieldAccess] access to field A
# 74| 1: [FieldAccess] access to field Item1
# 74| -1: [MethodCall] call to method F
# 75| 4: [ExprStmt] ...;
# 75| 0: [AssignExpr] ... = ...
@@ -218,7 +218,7 @@ CSharp7.cs:
# 82| -1: [TypeMention] string
# 83| 4: [BlockStmt] {...}
# 84| 0: [ReturnStmt] return ...;
# 84| 0: [FieldAccess] access to field a
# 84| 0: [FieldAccess] access to field Item1
# 84| -1: [TupleExpr] (..., ...)
# 84| 0: [ParameterAccess] access to parameter x
# 84| 1: [IntLiteral] 2

View File

@@ -1,29 +1,6 @@
| CSharp7.cs:41:13:41:21 | "tainted" | CSharp7.cs:41:9:41:21 | SSA def(x) |
| CSharp7.cs:79:23:79:24 | "" | CSharp7.cs:79:22:79:28 | (..., ...) |
| CSharp7.cs:89:19:89:27 | "tainted" | CSharp7.cs:89:13:89:34 | SSA def(t1) |
| CSharp7.cs:89:19:89:27 | "tainted" | CSharp7.cs:89:18:89:34 | (..., ...) |
| CSharp7.cs:89:19:89:27 | "tainted" | CSharp7.cs:90:28:90:29 | access to local variable t1 |
| CSharp7.cs:89:19:89:27 | "tainted" | CSharp7.cs:92:20:92:21 | access to local variable t1 |
| CSharp7.cs:89:19:89:27 | "tainted" | CSharp7.cs:92:20:92:27 | access to field Item1 |
| CSharp7.cs:89:30:89:33 | "X2" | CSharp7.cs:89:13:89:34 | SSA def(t1) |
| CSharp7.cs:89:30:89:33 | "X2" | CSharp7.cs:89:18:89:34 | (..., ...) |
| CSharp7.cs:89:30:89:33 | "X2" | CSharp7.cs:90:28:90:29 | access to local variable t1 |
| CSharp7.cs:89:30:89:33 | "X2" | CSharp7.cs:92:20:92:21 | access to local variable t1 |
| CSharp7.cs:89:30:89:33 | "X2" | CSharp7.cs:92:20:92:27 | access to field Item1 |
| CSharp7.cs:97:22:97:37 | "TupleExprNode1" | CSharp7.cs:97:18:97:38 | (..., ...) |
| CSharp7.cs:98:23:98:38 | "TupleExprNode2" | CSharp7.cs:98:18:98:43 | (..., ...) |
| CSharp7.cs:98:23:98:38 | "TupleExprNode2" | CSharp7.cs:98:22:98:42 | (..., ...) |
| CSharp7.cs:103:19:103:38 | "TupleMemberAccess1" | CSharp7.cs:103:18:103:42 | (..., ...) |
| CSharp7.cs:103:19:103:38 | "TupleMemberAccess1" | CSharp7.cs:103:18:103:48 | access to field Item1 |
| CSharp7.cs:104:23:104:42 | "TupleMemberAccess2" | CSharp7.cs:104:18:104:47 | (..., ...) |
| CSharp7.cs:104:23:104:42 | "TupleMemberAccess2" | CSharp7.cs:104:18:104:53 | access to field Item2 |
| CSharp7.cs:104:23:104:42 | "TupleMemberAccess2" | CSharp7.cs:104:22:104:46 | (..., ...) |
| CSharp7.cs:109:29:109:37 | "DefUse1" | CSharp7.cs:109:9:109:46 | SSA def(m1) |
| CSharp7.cs:109:29:109:37 | "DefUse1" | CSharp7.cs:109:28:109:46 | (..., ...) |
| CSharp7.cs:109:29:109:37 | "DefUse1" | CSharp7.cs:112:26:112:33 | (..., ...) |
| CSharp7.cs:109:29:109:37 | "DefUse1" | CSharp7.cs:112:27:112:28 | access to local variable m1 |
| CSharp7.cs:114:50:114:58 | "DefUse2" | CSharp7.cs:114:38:114:67 | ... = ... |
| CSharp7.cs:114:50:114:58 | "DefUse2" | CSharp7.cs:114:49:114:67 | (..., ...) |
| CSharp7.cs:123:28:123:36 | "DefUse3" | CSharp7.cs:123:22:123:36 | ... = ... |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:177:16:177:30 | SSA def(src) |
| CSharp7.cs:177:22:177:30 | "tainted" | CSharp7.cs:182:23:182:25 | access to local variable src |

View File

@@ -1,45 +1,45 @@
| CSharp7.cs:66:16:66:27 | (..., ...) | read |
| CSharp7.cs:71:9:71:22 | (..., ...) | write |
| CSharp7.cs:73:9:73:14 | (..., ...) | write |
| CSharp7.cs:75:9:75:23 | (..., ...) | write |
| CSharp7.cs:75:27:75:35 | (..., ...) | read |
| CSharp7.cs:76:9:76:14 | (..., ...) | write |
| CSharp7.cs:76:18:76:23 | (..., ...) | write |
| CSharp7.cs:76:27:76:32 | (..., ...) | read |
| CSharp7.cs:77:9:77:31 | (..., ...) | write |
| CSharp7.cs:77:17:77:30 | (..., ...) | write |
| CSharp7.cs:77:35:77:40 | (..., ...) | read |
| CSharp7.cs:78:9:78:19 | (..., ...) | write |
| CSharp7.cs:78:13:78:18 | (..., ...) | write |
| CSharp7.cs:78:23:78:33 | (..., ...) | read |
| CSharp7.cs:78:27:78:32 | (..., ...) | read |
| CSharp7.cs:79:9:79:18 | (..., ...) | write |
| CSharp7.cs:79:22:79:28 | (..., ...) | read |
| CSharp7.cs:84:16:84:24 | (..., ...) | read |
| CSharp7.cs:89:18:89:34 | (..., ...) | read |
| CSharp7.cs:90:9:90:24 | (..., ...) | write |
| CSharp7.cs:97:18:97:38 | (..., ...) | read |
| CSharp7.cs:98:18:98:43 | (..., ...) | read |
| CSharp7.cs:98:22:98:42 | (..., ...) | read |
| CSharp7.cs:103:18:103:42 | (..., ...) | read |
| CSharp7.cs:104:18:104:47 | (..., ...) | read |
| CSharp7.cs:104:22:104:46 | (..., ...) | read |
| CSharp7.cs:109:9:109:24 | (..., ...) | write |
| CSharp7.cs:109:28:109:46 | (..., ...) | read |
| CSharp7.cs:109:40:109:45 | (..., ...) | read |
| CSharp7.cs:112:9:112:22 | (..., ...) | write |
| CSharp7.cs:112:14:112:21 | (..., ...) | write |
| CSharp7.cs:112:26:112:33 | (..., ...) | read |
| CSharp7.cs:114:9:114:34 | (..., ...) | write |
| CSharp7.cs:114:18:114:33 | (..., ...) | write |
| CSharp7.cs:114:38:114:45 | (..., ...) | write |
| CSharp7.cs:114:49:114:67 | (..., ...) | read |
| CSharp7.cs:114:61:114:66 | (..., ...) | read |
| CSharp7.cs:218:16:218:23 | (..., ...) | read |
| CSharp7.cs:224:9:224:14 | (..., ...) | write |
| CSharp7.cs:225:9:225:18 | (..., ...) | write |
| CSharp7.cs:226:9:226:18 | (..., ...) | write |
| CSharp7.cs:285:40:285:61 | (..., ...) | read |
| CSharp7.cs:287:18:287:34 | (..., ...) | write |
| CSharp7.cs:289:18:289:31 | (..., ...) | write |
| CSharp7.cs:291:18:291:27 | (..., ...) | write |
| CSharp7.cs:66:16:66:27 | (..., ...) | construct |
| CSharp7.cs:71:9:71:22 | (..., ...) | deconstruct |
| CSharp7.cs:73:9:73:14 | (..., ...) | deconstruct |
| CSharp7.cs:75:9:75:23 | (..., ...) | deconstruct |
| CSharp7.cs:75:27:75:35 | (..., ...) | construct |
| CSharp7.cs:76:9:76:14 | (..., ...) | deconstruct |
| CSharp7.cs:76:18:76:23 | (..., ...) | deconstruct |
| CSharp7.cs:76:27:76:32 | (..., ...) | construct |
| CSharp7.cs:77:9:77:31 | (..., ...) | deconstruct |
| CSharp7.cs:77:17:77:30 | (..., ...) | deconstruct |
| CSharp7.cs:77:35:77:40 | (..., ...) | construct |
| CSharp7.cs:78:9:78:19 | (..., ...) | deconstruct |
| CSharp7.cs:78:13:78:18 | (..., ...) | deconstruct |
| CSharp7.cs:78:23:78:33 | (..., ...) | construct |
| CSharp7.cs:78:27:78:32 | (..., ...) | construct |
| CSharp7.cs:79:9:79:18 | (..., ...) | deconstruct |
| CSharp7.cs:79:22:79:28 | (..., ...) | construct |
| CSharp7.cs:84:16:84:24 | (..., ...) | construct |
| CSharp7.cs:89:18:89:34 | (..., ...) | construct |
| CSharp7.cs:90:9:90:24 | (..., ...) | deconstruct |
| CSharp7.cs:97:18:97:38 | (..., ...) | construct |
| CSharp7.cs:98:18:98:43 | (..., ...) | construct |
| CSharp7.cs:98:22:98:42 | (..., ...) | construct |
| CSharp7.cs:103:18:103:42 | (..., ...) | construct |
| CSharp7.cs:104:18:104:47 | (..., ...) | construct |
| CSharp7.cs:104:22:104:46 | (..., ...) | construct |
| CSharp7.cs:109:9:109:24 | (..., ...) | deconstruct |
| CSharp7.cs:109:28:109:46 | (..., ...) | construct |
| CSharp7.cs:109:40:109:45 | (..., ...) | construct |
| CSharp7.cs:112:9:112:22 | (..., ...) | deconstruct |
| CSharp7.cs:112:14:112:21 | (..., ...) | deconstruct |
| CSharp7.cs:112:26:112:33 | (..., ...) | construct |
| CSharp7.cs:114:9:114:34 | (..., ...) | deconstruct |
| CSharp7.cs:114:18:114:33 | (..., ...) | deconstruct |
| CSharp7.cs:114:38:114:45 | (..., ...) | deconstruct |
| CSharp7.cs:114:49:114:67 | (..., ...) | construct |
| CSharp7.cs:114:61:114:66 | (..., ...) | construct |
| CSharp7.cs:218:16:218:23 | (..., ...) | construct |
| CSharp7.cs:224:9:224:14 | (..., ...) | deconstruct |
| CSharp7.cs:225:9:225:18 | (..., ...) | deconstruct |
| CSharp7.cs:226:9:226:18 | (..., ...) | deconstruct |
| CSharp7.cs:285:40:285:61 | (..., ...) | construct |
| CSharp7.cs:287:18:287:34 | (..., ...) | deconstruct |
| CSharp7.cs:289:18:289:31 | (..., ...) | deconstruct |
| CSharp7.cs:291:18:291:27 | (..., ...) | deconstruct |

View File

@@ -1,5 +1,5 @@
import csharp
from TupleExpr e, string access
where if e.isReadAccess() then access = "read" else access = "write"
where if e.isConstruction() then access = "construct" else access = "deconstruct"
select e, access

View File

@@ -1,92 +1,92 @@
| CSharp7.cs:66:16:66:27 | (..., ...) | 0 | CSharp7.cs:66:20:66:20 | 1 |
| CSharp7.cs:66:16:66:27 | (..., ...) | 1 | CSharp7.cs:66:26:66:26 | 2 |
| CSharp7.cs:71:9:71:22 | (..., ...) | 0 | CSharp7.cs:71:14:71:14 | Int32 x |
| CSharp7.cs:71:9:71:22 | (..., ...) | 1 | CSharp7.cs:71:21:71:21 | Int32 y |
| CSharp7.cs:73:9:73:14 | (..., ...) | 0 | CSharp7.cs:73:10:73:10 | access to local variable x |
| CSharp7.cs:73:9:73:14 | (..., ...) | 1 | CSharp7.cs:73:13:73:13 | access to local variable y |
| CSharp7.cs:75:9:75:23 | (..., ...) | 0 | CSharp7.cs:75:10:75:10 | access to local variable x |
| CSharp7.cs:75:9:75:23 | (..., ...) | 1 | CSharp7.cs:75:13:75:13 | access to local variable y |
| CSharp7.cs:75:9:75:23 | (..., ...) | 2 | CSharp7.cs:75:16:75:22 | access to field Item1 |
| CSharp7.cs:75:27:75:35 | (..., ...) | 0 | CSharp7.cs:75:28:75:28 | 1 |
| CSharp7.cs:75:27:75:35 | (..., ...) | 1 | CSharp7.cs:75:31:75:31 | 2 |
| CSharp7.cs:75:27:75:35 | (..., ...) | 2 | CSharp7.cs:75:34:75:34 | 3 |
| CSharp7.cs:76:9:76:14 | (..., ...) | 0 | CSharp7.cs:76:10:76:10 | access to local variable x |
| CSharp7.cs:76:9:76:14 | (..., ...) | 1 | CSharp7.cs:76:13:76:13 | access to local variable y |
| CSharp7.cs:76:18:76:23 | (..., ...) | 0 | CSharp7.cs:76:19:76:19 | access to local variable x |
| CSharp7.cs:76:18:76:23 | (..., ...) | 1 | CSharp7.cs:76:22:76:22 | access to local variable y |
| CSharp7.cs:76:27:76:32 | (..., ...) | 0 | CSharp7.cs:76:28:76:28 | 1 |
| CSharp7.cs:76:27:76:32 | (..., ...) | 1 | CSharp7.cs:76:31:76:31 | 2 |
| CSharp7.cs:77:9:77:31 | (..., ...) | 0 | CSharp7.cs:77:14:77:14 | Int32 a |
| CSharp7.cs:77:9:77:31 | (..., ...) | 1 | CSharp7.cs:77:17:77:30 | (..., ...) |
| CSharp7.cs:77:17:77:30 | (..., ...) | 0 | CSharp7.cs:77:22:77:22 | Int32 b |
| CSharp7.cs:77:17:77:30 | (..., ...) | 1 | CSharp7.cs:77:29:77:29 | Int32 c |
| CSharp7.cs:77:35:77:40 | (..., ...) | 0 | CSharp7.cs:77:36:77:36 | 1 |
| CSharp7.cs:77:35:77:40 | (..., ...) | 1 | CSharp7.cs:77:39:77:39 | access to local variable z |
| CSharp7.cs:78:9:78:19 | (..., ...) | 0 | CSharp7.cs:78:10:78:10 | access to local variable a |
| CSharp7.cs:78:9:78:19 | (..., ...) | 1 | CSharp7.cs:78:13:78:18 | (..., ...) |
| CSharp7.cs:78:13:78:18 | (..., ...) | 0 | CSharp7.cs:78:14:78:14 | access to local variable b |
| CSharp7.cs:78:13:78:18 | (..., ...) | 1 | CSharp7.cs:78:17:78:17 | access to local variable c |
| CSharp7.cs:78:23:78:33 | (..., ...) | 0 | CSharp7.cs:78:24:78:24 | access to local variable b |
| CSharp7.cs:78:23:78:33 | (..., ...) | 1 | CSharp7.cs:78:27:78:32 | (..., ...) |
| CSharp7.cs:78:27:78:32 | (..., ...) | 0 | CSharp7.cs:78:28:78:28 | access to local variable c |
| CSharp7.cs:78:27:78:32 | (..., ...) | 1 | CSharp7.cs:78:31:78:31 | access to local variable a |
| CSharp7.cs:79:9:79:18 | (..., ...) | 0 | CSharp7.cs:79:14:79:14 | String i |
| CSharp7.cs:79:9:79:18 | (..., ...) | 1 | CSharp7.cs:79:17:79:17 | Int32 j |
| CSharp7.cs:79:22:79:28 | (..., ...) | 0 | CSharp7.cs:79:23:79:24 | "" |
| CSharp7.cs:79:22:79:28 | (..., ...) | 1 | CSharp7.cs:79:27:79:27 | access to local variable x |
| CSharp7.cs:84:16:84:24 | (..., ...) | 0 | CSharp7.cs:84:20:84:20 | access to parameter x |
| CSharp7.cs:84:16:84:24 | (..., ...) | 1 | CSharp7.cs:84:23:84:23 | 2 |
| CSharp7.cs:89:18:89:34 | (..., ...) | 0 | CSharp7.cs:89:19:89:27 | "tainted" |
| CSharp7.cs:89:18:89:34 | (..., ...) | 1 | CSharp7.cs:89:30:89:33 | "X2" |
| CSharp7.cs:90:9:90:24 | (..., ...) | 0 | CSharp7.cs:90:14:90:15 | String t2 |
| CSharp7.cs:90:9:90:24 | (..., ...) | 1 | CSharp7.cs:90:22:90:23 | String t3 |
| CSharp7.cs:97:18:97:38 | (..., ...) | 0 | CSharp7.cs:97:19:97:19 | 1 |
| CSharp7.cs:97:18:97:38 | (..., ...) | 1 | CSharp7.cs:97:22:97:37 | "TupleExprNode1" |
| CSharp7.cs:98:18:98:43 | (..., ...) | 0 | CSharp7.cs:98:19:98:19 | 1 |
| CSharp7.cs:98:18:98:43 | (..., ...) | 1 | CSharp7.cs:98:22:98:42 | (..., ...) |
| CSharp7.cs:98:22:98:42 | (..., ...) | 0 | CSharp7.cs:98:23:98:38 | "TupleExprNode2" |
| CSharp7.cs:98:22:98:42 | (..., ...) | 1 | CSharp7.cs:98:41:98:41 | 2 |
| CSharp7.cs:103:18:103:42 | (..., ...) | 0 | CSharp7.cs:103:19:103:38 | "TupleMemberAccess1" |
| CSharp7.cs:103:18:103:42 | (..., ...) | 1 | CSharp7.cs:103:41:103:41 | 0 |
| CSharp7.cs:104:18:104:47 | (..., ...) | 0 | CSharp7.cs:104:19:104:19 | 0 |
| CSharp7.cs:104:18:104:47 | (..., ...) | 1 | CSharp7.cs:104:22:104:46 | (..., ...) |
| CSharp7.cs:104:22:104:46 | (..., ...) | 0 | CSharp7.cs:104:23:104:42 | "TupleMemberAccess2" |
| CSharp7.cs:104:22:104:46 | (..., ...) | 1 | CSharp7.cs:104:45:104:45 | 1 |
| CSharp7.cs:109:9:109:24 | (..., ...) | 0 | CSharp7.cs:109:14:109:15 | String m1 |
| CSharp7.cs:109:9:109:24 | (..., ...) | 1 | CSharp7.cs:109:22:109:23 | (Int32,Int32) m2 |
| CSharp7.cs:109:28:109:46 | (..., ...) | 0 | CSharp7.cs:109:29:109:37 | "DefUse1" |
| CSharp7.cs:109:28:109:46 | (..., ...) | 1 | CSharp7.cs:109:40:109:45 | (..., ...) |
| CSharp7.cs:109:40:109:45 | (..., ...) | 0 | CSharp7.cs:109:41:109:41 | 0 |
| CSharp7.cs:109:40:109:45 | (..., ...) | 1 | CSharp7.cs:109:44:109:44 | 1 |
| CSharp7.cs:112:9:112:22 | (..., ...) | 0 | CSharp7.cs:112:10:112:11 | access to local variable m3 |
| CSharp7.cs:112:9:112:22 | (..., ...) | 1 | CSharp7.cs:112:14:112:21 | (..., ...) |
| CSharp7.cs:112:14:112:21 | (..., ...) | 0 | CSharp7.cs:112:15:112:16 | access to local variable m4 |
| CSharp7.cs:112:14:112:21 | (..., ...) | 1 | CSharp7.cs:112:19:112:20 | access to local variable m5 |
| CSharp7.cs:112:26:112:33 | (..., ...) | 0 | CSharp7.cs:112:27:112:28 | access to local variable m1 |
| CSharp7.cs:112:26:112:33 | (..., ...) | 1 | CSharp7.cs:112:31:112:32 | access to local variable m2 |
| CSharp7.cs:114:9:114:34 | (..., ...) | 0 | CSharp7.cs:114:14:114:15 | String m7 |
| CSharp7.cs:114:9:114:34 | (..., ...) | 1 | CSharp7.cs:114:18:114:33 | (..., ...) |
| CSharp7.cs:114:18:114:33 | (..., ...) | 0 | CSharp7.cs:114:23:114:24 | Int32 m8 |
| CSharp7.cs:114:18:114:33 | (..., ...) | 1 | CSharp7.cs:114:31:114:32 | Int32 m9 |
| CSharp7.cs:114:38:114:45 | (..., ...) | 0 | CSharp7.cs:114:39:114:40 | access to local variable m1 |
| CSharp7.cs:114:38:114:45 | (..., ...) | 1 | CSharp7.cs:114:43:114:44 | access to local variable m2 |
| CSharp7.cs:114:49:114:67 | (..., ...) | 0 | CSharp7.cs:114:50:114:58 | "DefUse2" |
| CSharp7.cs:114:49:114:67 | (..., ...) | 1 | CSharp7.cs:114:61:114:66 | (..., ...) |
| CSharp7.cs:114:61:114:66 | (..., ...) | 0 | CSharp7.cs:114:62:114:62 | 0 |
| CSharp7.cs:114:61:114:66 | (..., ...) | 1 | CSharp7.cs:114:65:114:65 | 1 |
| CSharp7.cs:218:16:218:23 | (..., ...) | 0 | CSharp7.cs:218:17:218:17 | 0 |
| CSharp7.cs:218:16:218:23 | (..., ...) | 1 | CSharp7.cs:218:20:218:22 | 0 |
| CSharp7.cs:224:9:224:14 | (..., ...) | 0 | CSharp7.cs:224:10:224:10 | _ |
| CSharp7.cs:224:9:224:14 | (..., ...) | 1 | CSharp7.cs:224:13:224:13 | _ |
| CSharp7.cs:225:9:225:18 | (..., ...) | 0 | CSharp7.cs:225:14:225:14 | Int32 x |
| CSharp7.cs:225:9:225:18 | (..., ...) | 1 | CSharp7.cs:225:17:225:17 | _ |
| CSharp7.cs:226:9:226:18 | (..., ...) | 0 | CSharp7.cs:226:10:226:10 | _ |
| CSharp7.cs:226:9:226:18 | (..., ...) | 1 | CSharp7.cs:226:17:226:17 | Double y |
| CSharp7.cs:285:40:285:61 | (..., ...) | 0 | CSharp7.cs:285:41:285:48 | access to property Key |
| CSharp7.cs:285:40:285:61 | (..., ...) | 1 | CSharp7.cs:285:51:285:60 | access to property Value |
| CSharp7.cs:287:18:287:34 | (..., ...) | 0 | CSharp7.cs:287:23:287:23 | Int32 a |
| CSharp7.cs:287:18:287:34 | (..., ...) | 1 | CSharp7.cs:287:33:287:33 | String b |
| CSharp7.cs:289:18:289:31 | (..., ...) | 0 | CSharp7.cs:289:23:289:23 | Int32 a |
| CSharp7.cs:289:18:289:31 | (..., ...) | 1 | CSharp7.cs:289:30:289:30 | String b |
| CSharp7.cs:291:18:291:27 | (..., ...) | 0 | CSharp7.cs:291:23:291:23 | Int32 a |
| CSharp7.cs:291:18:291:27 | (..., ...) | 1 | CSharp7.cs:291:26:291:26 | String b |
| CSharp7.cs:66:16:66:27 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:66:20:66:20 | 1 |
| CSharp7.cs:66:16:66:27 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:66:26:66:26 | 2 |
| CSharp7.cs:71:9:71:22 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:71:14:71:14 | Int32 x |
| CSharp7.cs:71:9:71:22 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:71:21:71:21 | Int32 y |
| CSharp7.cs:73:9:73:14 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:73:10:73:10 | access to local variable x |
| CSharp7.cs:73:9:73:14 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:73:13:73:13 | access to local variable y |
| CSharp7.cs:75:9:75:23 | (..., ...) | file://:0:0:0:0 | (Int32,Int32,Int32) | 0 | CSharp7.cs:75:10:75:10 | access to local variable x |
| CSharp7.cs:75:9:75:23 | (..., ...) | file://:0:0:0:0 | (Int32,Int32,Int32) | 1 | CSharp7.cs:75:13:75:13 | access to local variable y |
| CSharp7.cs:75:9:75:23 | (..., ...) | file://:0:0:0:0 | (Int32,Int32,Int32) | 2 | CSharp7.cs:75:16:75:22 | access to field Item1 |
| CSharp7.cs:75:27:75:35 | (..., ...) | file://:0:0:0:0 | (Int32,Int32,Int32) | 0 | CSharp7.cs:75:28:75:28 | 1 |
| CSharp7.cs:75:27:75:35 | (..., ...) | file://:0:0:0:0 | (Int32,Int32,Int32) | 1 | CSharp7.cs:75:31:75:31 | 2 |
| CSharp7.cs:75:27:75:35 | (..., ...) | file://:0:0:0:0 | (Int32,Int32,Int32) | 2 | CSharp7.cs:75:34:75:34 | 3 |
| CSharp7.cs:76:9:76:14 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:76:10:76:10 | access to local variable x |
| CSharp7.cs:76:9:76:14 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:76:13:76:13 | access to local variable y |
| CSharp7.cs:76:18:76:23 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:76:19:76:19 | access to local variable x |
| CSharp7.cs:76:18:76:23 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:76:22:76:22 | access to local variable y |
| CSharp7.cs:76:27:76:32 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:76:28:76:28 | 1 |
| CSharp7.cs:76:27:76:32 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:76:31:76:31 | 2 |
| CSharp7.cs:77:9:77:31 | (..., ...) | file://:0:0:0:0 | (Int32,(Int32,Int32)) | 0 | CSharp7.cs:77:14:77:14 | Int32 a |
| CSharp7.cs:77:9:77:31 | (..., ...) | file://:0:0:0:0 | (Int32,(Int32,Int32)) | 1 | CSharp7.cs:77:17:77:30 | (..., ...) |
| CSharp7.cs:77:17:77:30 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:77:22:77:22 | Int32 b |
| CSharp7.cs:77:17:77:30 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:77:29:77:29 | Int32 c |
| CSharp7.cs:77:35:77:40 | (..., ...) | file://:0:0:0:0 | (Int32,(Int32,Int32)) | 0 | CSharp7.cs:77:36:77:36 | 1 |
| CSharp7.cs:77:35:77:40 | (..., ...) | file://:0:0:0:0 | (Int32,(Int32,Int32)) | 1 | CSharp7.cs:77:39:77:39 | access to local variable z |
| CSharp7.cs:78:9:78:19 | (..., ...) | file://:0:0:0:0 | (Int32,(Int32,Int32)) | 0 | CSharp7.cs:78:10:78:10 | access to local variable a |
| CSharp7.cs:78:9:78:19 | (..., ...) | file://:0:0:0:0 | (Int32,(Int32,Int32)) | 1 | CSharp7.cs:78:13:78:18 | (..., ...) |
| CSharp7.cs:78:13:78:18 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:78:14:78:14 | access to local variable b |
| CSharp7.cs:78:13:78:18 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:78:17:78:17 | access to local variable c |
| CSharp7.cs:78:23:78:33 | (..., ...) | file://:0:0:0:0 | (Int32,(Int32,Int32)) | 0 | CSharp7.cs:78:24:78:24 | access to local variable b |
| CSharp7.cs:78:23:78:33 | (..., ...) | file://:0:0:0:0 | (Int32,(Int32,Int32)) | 1 | CSharp7.cs:78:27:78:32 | (..., ...) |
| CSharp7.cs:78:27:78:32 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:78:28:78:28 | access to local variable c |
| CSharp7.cs:78:27:78:32 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:78:31:78:31 | access to local variable a |
| CSharp7.cs:79:9:79:18 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 0 | CSharp7.cs:79:14:79:14 | String i |
| CSharp7.cs:79:9:79:18 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 1 | CSharp7.cs:79:17:79:17 | Int32 j |
| CSharp7.cs:79:22:79:28 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 0 | CSharp7.cs:79:23:79:24 | "" |
| CSharp7.cs:79:22:79:28 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 1 | CSharp7.cs:79:27:79:27 | access to local variable x |
| CSharp7.cs:84:16:84:24 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 0 | CSharp7.cs:84:20:84:20 | access to parameter x |
| CSharp7.cs:84:16:84:24 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 1 | CSharp7.cs:84:23:84:23 | 2 |
| CSharp7.cs:89:18:89:34 | (..., ...) | CSharp7.cs:89:18:89:34 | (String,String) | 0 | CSharp7.cs:89:19:89:27 | "tainted" |
| CSharp7.cs:89:18:89:34 | (..., ...) | CSharp7.cs:89:18:89:34 | (String,String) | 1 | CSharp7.cs:89:30:89:33 | "X2" |
| CSharp7.cs:90:9:90:24 | (..., ...) | CSharp7.cs:89:18:89:34 | (String,String) | 0 | CSharp7.cs:90:14:90:15 | String t2 |
| CSharp7.cs:90:9:90:24 | (..., ...) | CSharp7.cs:89:18:89:34 | (String,String) | 1 | CSharp7.cs:90:22:90:23 | String t3 |
| CSharp7.cs:97:18:97:38 | (..., ...) | file://:0:0:0:0 | (Int32,String) | 0 | CSharp7.cs:97:19:97:19 | 1 |
| CSharp7.cs:97:18:97:38 | (..., ...) | file://:0:0:0:0 | (Int32,String) | 1 | CSharp7.cs:97:22:97:37 | "TupleExprNode1" |
| CSharp7.cs:98:18:98:43 | (..., ...) | CSharp7.cs:98:18:98:43 | (Int32,(String,Int32)) | 0 | CSharp7.cs:98:19:98:19 | 1 |
| CSharp7.cs:98:18:98:43 | (..., ...) | CSharp7.cs:98:18:98:43 | (Int32,(String,Int32)) | 1 | CSharp7.cs:98:22:98:42 | (..., ...) |
| CSharp7.cs:98:22:98:42 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 0 | CSharp7.cs:98:23:98:38 | "TupleExprNode2" |
| CSharp7.cs:98:22:98:42 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 1 | CSharp7.cs:98:41:98:41 | 2 |
| CSharp7.cs:103:18:103:42 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 0 | CSharp7.cs:103:19:103:38 | "TupleMemberAccess1" |
| CSharp7.cs:103:18:103:42 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 1 | CSharp7.cs:103:41:103:41 | 0 |
| CSharp7.cs:104:18:104:47 | (..., ...) | CSharp7.cs:98:18:98:43 | (Int32,(String,Int32)) | 0 | CSharp7.cs:104:19:104:19 | 0 |
| CSharp7.cs:104:18:104:47 | (..., ...) | CSharp7.cs:98:18:98:43 | (Int32,(String,Int32)) | 1 | CSharp7.cs:104:22:104:46 | (..., ...) |
| CSharp7.cs:104:22:104:46 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 0 | CSharp7.cs:104:23:104:42 | "TupleMemberAccess2" |
| CSharp7.cs:104:22:104:46 | (..., ...) | file://:0:0:0:0 | (String,Int32) | 1 | CSharp7.cs:104:45:104:45 | 1 |
| CSharp7.cs:109:9:109:24 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 0 | CSharp7.cs:109:14:109:15 | String m1 |
| CSharp7.cs:109:9:109:24 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 1 | CSharp7.cs:109:22:109:23 | (Int32,Int32) m2 |
| CSharp7.cs:109:28:109:46 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 0 | CSharp7.cs:109:29:109:37 | "DefUse1" |
| CSharp7.cs:109:28:109:46 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 1 | CSharp7.cs:109:40:109:45 | (..., ...) |
| CSharp7.cs:109:40:109:45 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:109:41:109:41 | 0 |
| CSharp7.cs:109:40:109:45 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:109:44:109:44 | 1 |
| CSharp7.cs:112:9:112:22 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 0 | CSharp7.cs:112:10:112:11 | access to local variable m3 |
| CSharp7.cs:112:9:112:22 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 1 | CSharp7.cs:112:14:112:21 | (..., ...) |
| CSharp7.cs:112:14:112:21 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:112:15:112:16 | access to local variable m4 |
| CSharp7.cs:112:14:112:21 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:112:19:112:20 | access to local variable m5 |
| CSharp7.cs:112:26:112:33 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 0 | CSharp7.cs:112:27:112:28 | access to local variable m1 |
| CSharp7.cs:112:26:112:33 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 1 | CSharp7.cs:112:31:112:32 | access to local variable m2 |
| CSharp7.cs:114:9:114:34 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 0 | CSharp7.cs:114:14:114:15 | String m7 |
| CSharp7.cs:114:9:114:34 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 1 | CSharp7.cs:114:18:114:33 | (..., ...) |
| CSharp7.cs:114:18:114:33 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:114:23:114:24 | Int32 m8 |
| CSharp7.cs:114:18:114:33 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:114:31:114:32 | Int32 m9 |
| CSharp7.cs:114:38:114:45 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 0 | CSharp7.cs:114:39:114:40 | access to local variable m1 |
| CSharp7.cs:114:38:114:45 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 1 | CSharp7.cs:114:43:114:44 | access to local variable m2 |
| CSharp7.cs:114:49:114:67 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 0 | CSharp7.cs:114:50:114:58 | "DefUse2" |
| CSharp7.cs:114:49:114:67 | (..., ...) | file://:0:0:0:0 | (String,(Int32,Int32)) | 1 | CSharp7.cs:114:61:114:66 | (..., ...) |
| CSharp7.cs:114:61:114:66 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 0 | CSharp7.cs:114:62:114:62 | 0 |
| CSharp7.cs:114:61:114:66 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) | 1 | CSharp7.cs:114:65:114:65 | 1 |
| CSharp7.cs:218:16:218:23 | (..., ...) | CSharp7.cs:215:5:215:17 | (Int32,Double) | 0 | CSharp7.cs:218:17:218:17 | 0 |
| CSharp7.cs:218:16:218:23 | (..., ...) | CSharp7.cs:215:5:215:17 | (Int32,Double) | 1 | CSharp7.cs:218:20:218:22 | 0 |
| CSharp7.cs:224:9:224:14 | (..., ...) | CSharp7.cs:215:5:215:17 | (Int32,Double) | 0 | CSharp7.cs:224:10:224:10 | _ |
| CSharp7.cs:224:9:224:14 | (..., ...) | CSharp7.cs:215:5:215:17 | (Int32,Double) | 1 | CSharp7.cs:224:13:224:13 | _ |
| CSharp7.cs:225:9:225:18 | (..., ...) | CSharp7.cs:215:5:215:17 | (Int32,Double) | 0 | CSharp7.cs:225:14:225:14 | Int32 x |
| CSharp7.cs:225:9:225:18 | (..., ...) | CSharp7.cs:215:5:215:17 | (Int32,Double) | 1 | CSharp7.cs:225:17:225:17 | _ |
| CSharp7.cs:226:9:226:18 | (..., ...) | CSharp7.cs:215:5:215:17 | (Int32,Double) | 0 | CSharp7.cs:226:10:226:10 | _ |
| CSharp7.cs:226:9:226:18 | (..., ...) | CSharp7.cs:215:5:215:17 | (Int32,Double) | 1 | CSharp7.cs:226:17:226:17 | Double y |
| CSharp7.cs:285:40:285:61 | (..., ...) | file://:0:0:0:0 | (Int32,String) | 0 | CSharp7.cs:285:41:285:48 | access to property Key |
| CSharp7.cs:285:40:285:61 | (..., ...) | file://:0:0:0:0 | (Int32,String) | 1 | CSharp7.cs:285:51:285:60 | access to property Value |
| CSharp7.cs:287:18:287:34 | (..., ...) | file://:0:0:0:0 | (Int32,String) | 0 | CSharp7.cs:287:23:287:23 | Int32 a |
| CSharp7.cs:287:18:287:34 | (..., ...) | file://:0:0:0:0 | (Int32,String) | 1 | CSharp7.cs:287:33:287:33 | String b |
| CSharp7.cs:289:18:289:31 | (..., ...) | file://:0:0:0:0 | (Int32,String) | 0 | CSharp7.cs:289:23:289:23 | Int32 a |
| CSharp7.cs:289:18:289:31 | (..., ...) | file://:0:0:0:0 | (Int32,String) | 1 | CSharp7.cs:289:30:289:30 | String b |
| CSharp7.cs:291:18:291:27 | (..., ...) | file://:0:0:0:0 | (Int32,String) | 0 | CSharp7.cs:291:23:291:23 | Int32 a |
| CSharp7.cs:291:18:291:27 | (..., ...) | file://:0:0:0:0 | (Int32,String) | 1 | CSharp7.cs:291:26:291:26 | String b |

View File

@@ -1,4 +1,4 @@
import csharp
from TupleExpr e, int i
select e, i, e.getArgument(i)
select e, e.getType(), i, e.getArgument(i)

View File

@@ -1,49 +1,10 @@
| (Int32,(Int32,Int32)) | (int, (int, int)) | ValueTuple<Int32, (Int32,Int32)> | 2 | 0 | CSharp7.cs:77:10:77:14 | a |
| (Int32,(Int32,Int32)) | (int, (int, int)) | ValueTuple<Int32, (Int32,Int32)> | 2 | 0 | CSharp7.cs:77:36:77:36 | Item1 |
| (Int32,(Int32,Int32)) | (int, (int, int)) | ValueTuple<Int32, (Int32,Int32)> | 2 | 0 | CSharp7.cs:78:24:78:24 | b |
| (Int32,(Int32,Int32)) | (int, (int, int)) | ValueTuple<Int32, (Int32,Int32)> | 2 | 1 | CSharp7.cs:77:17:77:30 | Item2 |
| (Int32,(Int32,Int32)) | (int, (int, int)) | ValueTuple<Int32, (Int32,Int32)> | 2 | 1 | CSharp7.cs:77:39:77:39 | z |
| (Int32,(Int32,Int32)) | (int, (int, int)) | ValueTuple<Int32, (Int32,Int32)> | 2 | 1 | CSharp7.cs:78:27:78:32 | Item2 |
| (Int32,(String,Int32)) | (int, (string, int)) | ValueTuple<Int32, (String,Int32)> | 2 | 0 | CSharp7.cs:98:19:98:19 | Item1 |
| (Int32,(String,Int32)) | (int, (string, int)) | ValueTuple<Int32, (String,Int32)> | 2 | 1 | CSharp7.cs:98:22:98:42 | Item2 |
| (Int32,Double) | (int, double) | ValueTuple<Int32, Double> | 2 | 0 | CSharp7.cs:215:6:215:8 | Item1 |
| (Int32,Double) | (int, double) | ValueTuple<Int32, Double> | 2 | 0 | CSharp7.cs:225:10:225:14 | x |
| (Int32,Double) | (int, double) | ValueTuple<Int32, Double> | 2 | 0 | CSharp7.cs:226:10:226:10 | Item1 |
| (Int32,Double) | (int, double) | ValueTuple<Int32, Double> | 2 | 1 | CSharp7.cs:215:11:215:16 | Item2 |
| (Int32,Double) | (int, double) | ValueTuple<Int32, Double> | 2 | 1 | CSharp7.cs:225:17:225:17 | Item2 |
| (Int32,Double) | (int, double) | ValueTuple<Int32, Double> | 2 | 1 | CSharp7.cs:226:13:226:17 | y |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 0 | CSharp7.cs:64:10:64:10 | A |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 0 | CSharp7.cs:71:10:71:14 | x |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 0 | CSharp7.cs:77:18:77:22 | b |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 0 | CSharp7.cs:78:28:78:28 | c |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 0 | CSharp7.cs:112:15:112:16 | m4 |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 0 | CSharp7.cs:114:19:114:24 | m8 |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 1 | CSharp7.cs:64:17:64:17 | B |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 1 | CSharp7.cs:71:17:71:21 | y |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 1 | CSharp7.cs:77:25:77:29 | c |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 1 | CSharp7.cs:78:31:78:31 | a |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 1 | CSharp7.cs:112:19:112:20 | m5 |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 1 | CSharp7.cs:114:27:114:32 | m9 |
| (Int32,Int32,Int32) | (int, int, int) | ValueTuple<Int32, Int32, Int32> | 3 | 0 | CSharp7.cs:75:10:75:10 | x |
| (Int32,Int32,Int32) | (int, int, int) | ValueTuple<Int32, Int32, Int32> | 3 | 1 | CSharp7.cs:75:13:75:13 | y |
| (Int32,Int32,Int32) | (int, int, int) | ValueTuple<Int32, Int32, Int32> | 3 | 2 | CSharp7.cs:75:16:75:22 | Item3 |
| (Int32,String) | (int, string) | ValueTuple<Int32, String> | 2 | 0 | CSharp7.cs:285:41:285:48 | Key |
| (Int32,String) | (int, string) | ValueTuple<Int32, String> | 2 | 0 | CSharp7.cs:287:19:287:23 | a |
| (Int32,String) | (int, string) | ValueTuple<Int32, String> | 2 | 1 | CSharp7.cs:285:51:285:60 | Value |
| (Int32,String) | (int, string) | ValueTuple<Int32, String> | 2 | 1 | CSharp7.cs:287:26:287:33 | b |
| (String,(Int32,Int32)) | (string, (int, int)) | ValueTuple<String, (Int32,Int32)> | 2 | 0 | CSharp7.cs:109:10:109:15 | m1 |
| (String,(Int32,Int32)) | (string, (int, int)) | ValueTuple<String, (Int32,Int32)> | 2 | 0 | CSharp7.cs:112:10:112:11 | m3 |
| (String,(Int32,Int32)) | (string, (int, int)) | ValueTuple<String, (Int32,Int32)> | 2 | 0 | CSharp7.cs:114:10:114:15 | m7 |
| (String,(Int32,Int32)) | (string, (int, int)) | ValueTuple<String, (Int32,Int32)> | 2 | 1 | CSharp7.cs:109:18:109:23 | m2 |
| (String,(Int32,Int32)) | (string, (int, int)) | ValueTuple<String, (Int32,Int32)> | 2 | 1 | CSharp7.cs:112:14:112:21 | Item2 |
| (String,(Int32,Int32)) | (string, (int, int)) | ValueTuple<String, (Int32,Int32)> | 2 | 1 | CSharp7.cs:114:18:114:33 | Item2 |
| (String,Int32) | (string, int) | ValueTuple<String, Int32> | 2 | 0 | CSharp7.cs:79:14:79:14 | i |
| (String,Int32) | (string, int) | ValueTuple<String, Int32> | 2 | 0 | CSharp7.cs:79:23:79:24 | Item1 |
| (String,Int32) | (string, int) | ValueTuple<String, Int32> | 2 | 0 | CSharp7.cs:84:17:84:17 | a |
| (String,Int32) | (string, int) | ValueTuple<String, Int32> | 2 | 1 | CSharp7.cs:79:17:79:17 | j |
| (String,Int32) | (string, int) | ValueTuple<String, Int32> | 2 | 1 | CSharp7.cs:79:27:79:27 | x |
| (String,Int32) | (string, int) | ValueTuple<String, Int32> | 2 | 1 | CSharp7.cs:84:23:84:23 | Item2 |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 0 | CSharp7.cs:64:10:64:10 | Item1 |
| (Int32,Int32) | (int, int) | ValueTuple<Int32, Int32> | 2 | 1 | file://:0:0:0:0 | Item2 |
| (String,Int32) | (string, int) | ValueTuple<String, Int32> | 2 | 0 | CSharp7.cs:84:17:84:17 | Item1 |
| (String,Int32) | (string, int) | ValueTuple<String, Int32> | 2 | 1 | file://:0:0:0:0 | Item2 |
| (String,String) | (string, string) | ValueTuple<String, String> | 2 | 0 | CSharp7.cs:89:19:89:27 | Item1 |
| (String,String) | (string, string) | ValueTuple<String, String> | 2 | 0 | CSharp7.cs:90:10:90:15 | t2 |
| (String,String) | (string, string) | ValueTuple<String, String> | 2 | 1 | CSharp7.cs:89:30:89:33 | Item2 |
| (String,String) | (string, string) | ValueTuple<String, String> | 2 | 1 | CSharp7.cs:90:18:90:23 | t3 |

View File

@@ -187,3 +187,17 @@ labeledPatternExpr
| patterns.cs:128:27:128:31 | Int32 x | X |
| patterns.cs:129:27:129:28 | 10 | X |
| patterns.cs:142:31:142:32 | 10 | X |
tupleTypes
| patterns.cs:59:18:59:27 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:86:15:86:19 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:91:16:91:20 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:108:9:108:20 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:108:24:108:31 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:110:22:110:26 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:111:22:111:26 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:115:9:115:16 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:115:20:115:27 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:117:27:117:33 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:118:28:118:34 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:119:33:119:38 | (..., ...) | file://:0:0:0:0 | (Int32,Int32) |
| patterns.cs:131:13:131:22 | (..., ...) | file://:0:0:0:0 | (Int32,Object) |

View File

@@ -67,3 +67,5 @@ query predicate isRecursivePatternExprWithDecl(
}
query predicate labeledPatternExpr(LabeledPatternExpr e, string s) { s = e.getLabel() }
query predicate tupleTypes(TupleExpr te, Type t) { te.getType() = t }

View File

@@ -943,13 +943,7 @@
| Splitting.cs:56:15:56:15 | [b (line 46): true] "c" | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." |
| Splitting.cs:56:17:56:17 | [b (line 46): false] access to local variable x | Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." |
| Splitting.cs:56:17:56:17 | [b (line 46): true] access to local variable x | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." |
| Splitting.cs:57:13:57:18 | [b (line 46): false] (..., ...) | Splitting.cs:57:13:57:24 | [b (line 46): false] access to field Item1 |
| Splitting.cs:57:13:57:18 | [b (line 46): true] (..., ...) | Splitting.cs:57:13:57:24 | [b (line 46): true] access to field Item1 |
| Splitting.cs:57:14:57:14 | [b (line 46): false] access to local variable x | Splitting.cs:57:13:57:18 | [b (line 46): false] (..., ...) |
| Splitting.cs:57:14:57:14 | [b (line 46): true] access to local variable x | Splitting.cs:57:13:57:18 | [b (line 46): true] (..., ...) |
| Splitting.cs:57:17:57:17 | [b (line 46): false] access to local variable y | Splitting.cs:57:13:57:18 | [b (line 46): false] (..., ...) |
| Splitting.cs:57:17:57:17 | [b (line 46): false] access to local variable y | Splitting.cs:58:27:58:27 | [b (line 46): false] access to local variable y |
| Splitting.cs:57:17:57:17 | [b (line 46): true] access to local variable y | Splitting.cs:57:13:57:18 | [b (line 46): true] (..., ...) |
| Splitting.cs:57:17:57:17 | [b (line 46): true] access to local variable y | Splitting.cs:58:27:58:27 | [b (line 46): true] access to local variable y |
| Splitting.cs:58:22:58:22 | [b (line 46): false] SSA def(s) | Splitting.cs:59:19:59:19 | [b (line 46): false] access to local variable s |
| Splitting.cs:58:22:58:22 | [b (line 46): true] SSA def(s) | Splitting.cs:59:19:59:19 | [b (line 46): true] access to local variable s |

View File

@@ -0,0 +1,109 @@
| Tuples.cs:7:13:7:56 | SSA def(x) | Tuples.cs:8:27:8:27 | access to local variable x |
| Tuples.cs:7:13:7:56 | SSA qualifier def(x.Item1) | Tuples.cs:23:14:23:20 | access to field Item1 |
| Tuples.cs:7:13:7:56 | SSA qualifier def(x.Item2) | Tuples.cs:25:14:25:20 | access to field Item2 |
| Tuples.cs:7:13:7:56 | SSA qualifier def(x.Item2.Item1) | Tuples.cs:25:14:25:26 | access to field Item1 |
| Tuples.cs:7:13:7:56 | SSA qualifier def(x.Item2.Item2) | Tuples.cs:26:14:26:26 | access to field Item2 |
| Tuples.cs:7:17:7:56 | (..., ...) | Tuples.cs:7:13:7:56 | SSA def(x) |
| Tuples.cs:8:9:8:27 | SSA def(a) | Tuples.cs:9:14:9:14 | access to local variable a |
| Tuples.cs:8:9:8:27 | SSA def(b) | Tuples.cs:10:14:10:14 | access to local variable b |
| Tuples.cs:8:9:8:27 | SSA def(c) | Tuples.cs:11:14:11:14 | access to local variable c |
| Tuples.cs:8:27:8:27 | access to local variable x | Tuples.cs:8:9:8:23 | (..., ...) |
| Tuples.cs:8:27:8:27 | access to local variable x | Tuples.cs:13:23:13:23 | access to local variable x |
| Tuples.cs:13:9:13:23 | SSA def(a) | Tuples.cs:14:14:14:14 | access to local variable a |
| Tuples.cs:13:9:13:23 | SSA def(b) | Tuples.cs:15:14:15:14 | access to local variable b |
| Tuples.cs:13:9:13:23 | SSA def(c) | Tuples.cs:16:14:16:14 | access to local variable c |
| Tuples.cs:13:23:13:23 | access to local variable x | Tuples.cs:13:9:13:19 | (..., ...) |
| Tuples.cs:13:23:13:23 | access to local variable x | Tuples.cs:18:26:18:26 | access to local variable x |
| Tuples.cs:18:9:18:26 | SSA def(p) | Tuples.cs:19:14:19:14 | access to local variable p |
| Tuples.cs:18:9:18:26 | SSA def(q) | Tuples.cs:20:14:20:14 | access to local variable q |
| Tuples.cs:18:9:18:26 | SSA qualifier def(q.Item1) | Tuples.cs:20:14:20:20 | access to field Item1 |
| Tuples.cs:18:9:18:26 | SSA qualifier def(q.Item2) | Tuples.cs:21:14:21:20 | access to field Item2 |
| Tuples.cs:18:26:18:26 | access to local variable x | Tuples.cs:18:9:18:22 | (..., ...) |
| Tuples.cs:18:26:18:26 | access to local variable x | Tuples.cs:23:14:23:14 | access to local variable x |
| Tuples.cs:20:14:20:14 | access to local variable q | Tuples.cs:21:14:21:14 | access to local variable q |
| Tuples.cs:23:14:23:14 | [post] access to local variable x | Tuples.cs:24:14:24:14 | access to local variable x |
| Tuples.cs:23:14:23:14 | access to local variable x | Tuples.cs:24:14:24:14 | access to local variable x |
| Tuples.cs:23:14:23:20 | [post] access to field Item1 | Tuples.cs:24:14:24:16 | access to field Item1 |
| Tuples.cs:23:14:23:20 | access to field Item1 | Tuples.cs:24:14:24:16 | access to field Item1 |
| Tuples.cs:24:14:24:14 | [post] access to local variable x | Tuples.cs:25:14:25:14 | access to local variable x |
| Tuples.cs:24:14:24:14 | access to local variable x | Tuples.cs:25:14:25:14 | access to local variable x |
| Tuples.cs:25:14:25:14 | access to local variable x | Tuples.cs:26:14:26:14 | access to local variable x |
| Tuples.cs:25:14:25:20 | access to field Item2 | Tuples.cs:26:14:26:20 | access to field Item2 |
| Tuples.cs:31:13:31:72 | SSA def(x) | Tuples.cs:32:14:32:14 | access to local variable x |
| Tuples.cs:31:13:31:72 | SSA qualifier def(x.Item1) | Tuples.cs:32:14:32:20 | access to field Item1 |
| Tuples.cs:31:13:31:72 | SSA qualifier def(x.Item2) | Tuples.cs:33:14:33:20 | access to field Item2 |
| Tuples.cs:31:13:31:72 | SSA qualifier def(x.Item10) | Tuples.cs:34:14:34:21 | access to field Item10 |
| Tuples.cs:31:17:31:72 | (..., ...) | Tuples.cs:31:13:31:72 | SSA def(x) |
| Tuples.cs:32:14:32:14 | [post] access to local variable x | Tuples.cs:33:14:33:14 | access to local variable x |
| Tuples.cs:32:14:32:14 | access to local variable x | Tuples.cs:33:14:33:14 | access to local variable x |
| Tuples.cs:33:14:33:14 | access to local variable x | Tuples.cs:34:14:34:14 | access to local variable x |
| Tuples.cs:39:13:39:68 | SSA def(x) | Tuples.cs:40:14:40:14 | access to local variable x |
| Tuples.cs:39:13:39:68 | SSA qualifier def(x.Item1) | Tuples.cs:40:14:40:20 | access to field Item1 |
| Tuples.cs:39:13:39:68 | SSA qualifier def(x.Item2) | Tuples.cs:41:14:41:20 | access to field Item2 |
| Tuples.cs:39:17:39:68 | (...) ... | Tuples.cs:39:13:39:68 | SSA def(x) |
| Tuples.cs:39:47:39:68 | (..., ...) | Tuples.cs:39:17:39:68 | (...) ... |
| Tuples.cs:40:14:40:14 | [post] access to local variable x | Tuples.cs:41:14:41:14 | access to local variable x |
| Tuples.cs:40:14:40:14 | access to local variable x | Tuples.cs:41:14:41:14 | access to local variable x |
| Tuples.cs:43:13:43:68 | SSA def(y) | Tuples.cs:44:14:44:14 | access to local variable y |
| Tuples.cs:43:13:43:68 | SSA qualifier def(y.Item1) | Tuples.cs:44:14:44:20 | access to field Item1 |
| Tuples.cs:43:13:43:68 | SSA qualifier def(y.Item2) | Tuples.cs:45:14:45:20 | access to field Item2 |
| Tuples.cs:43:17:43:68 | (...) ... | Tuples.cs:43:13:43:68 | SSA def(y) |
| Tuples.cs:43:47:43:68 | (...) ... | Tuples.cs:43:17:43:68 | (...) ... |
| 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: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 |
| Tuples.cs:53:18:53:57 | SSA qualifier def(t.Item2.Item1) | Tuples.cs:56:22:56:34 | access to field Item1 |
| Tuples.cs:53:18:53:57 | SSA qualifier def(t.Item2.Item2) | Tuples.cs:55:22:55:34 | access to field Item2 |
| Tuples.cs:53:18:53:57 | SSA qualifier def(t.Item3) | Tuples.cs:53:64:53:70 | access to field Item3 |
| Tuples.cs:53:64:53:64 | access to local variable t | Tuples.cs:54:22:54:22 | access to local variable t |
| Tuples.cs:54:22:54:22 | [post] access to local variable t | Tuples.cs:55:22:55:22 | access to local variable t |
| Tuples.cs:54:22:54:22 | access to local variable t | Tuples.cs:55:22:55:22 | access to local variable t |
| Tuples.cs:55:22:55:22 | [post] access to local variable t | Tuples.cs:56:22:56:22 | access to local variable t |
| Tuples.cs:55:22:55:22 | access to local variable t | Tuples.cs:56:22:56:22 | access to local variable t |
| Tuples.cs:55:22:55:28 | [post] access to field Item2 | Tuples.cs:56:22:56:28 | access to field Item2 |
| Tuples.cs:55:22:55:28 | access to field Item2 | Tuples.cs:56:22:56:28 | access to field Item2 |
| 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: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 |

View File

@@ -0,0 +1,5 @@
import csharp
from DataFlow::Node pred, DataFlow::Node succ
where DataFlow::localFlowStep(pred, succ)
select pred, succ

View File

@@ -0,0 +1,360 @@
Tuples.cs:
# 3| [Class] Tuples
# 5| 5: [Method] M1
# 5| -1: [TypeMention] Void
# 6| 4: [BlockStmt] {...}
# 7| 0: [LocalVariableDeclStmt] ... ...;
# 7| 0: [LocalVariableDeclAndInitExpr] (String,(Int32,String)) x = ...
# 7| -1: [TypeMention] (string, (int, string))
# 7| 0: [LocalVariableAccess] access to local variable x
# 7| 1: [TupleExpr] (..., ...)
# 7| 0: [StringLiteral] "taint source"
# 7| 1: [TupleExpr] (..., ...)
# 7| 0: [IntLiteral] 1
# 7| 1: [StringLiteral] "taint source"
# 8| 1: [ExprStmt] ...;
# 8| 0: [AssignExpr] ... = ...
# 8| 0: [TupleExpr] (..., ...)
# 8| 0: [LocalVariableDeclExpr] String a
# 8| 1: [TupleExpr] (..., ...)
# 8| 0: [LocalVariableDeclExpr] Int32 b
# 8| 1: [LocalVariableDeclExpr] String c
# 8| 1: [LocalVariableAccess] access to local variable x
# 9| 2: [ExprStmt] ...;
# 9| 0: [MethodCall] call to method Sink
# 9| 0: [LocalVariableAccess] access to local variable a
# 10| 3: [ExprStmt] ...;
# 10| 0: [MethodCall] call to method Sink
# 10| 0: [LocalVariableAccess] access to local variable b
# 11| 4: [ExprStmt] ...;
# 11| 0: [MethodCall] call to method Sink
# 11| 0: [LocalVariableAccess] access to local variable c
# 13| 5: [ExprStmt] ...;
# 13| 0: [AssignExpr] ... = ...
# 13| 0: [TupleExpr] (..., ...)
# 13| 0: [LocalVariableAccess] access to local variable a
# 13| 1: [TupleExpr] (..., ...)
# 13| 0: [LocalVariableAccess] access to local variable b
# 13| 1: [LocalVariableAccess] access to local variable c
# 13| 1: [LocalVariableAccess] access to local variable x
# 14| 6: [ExprStmt] ...;
# 14| 0: [MethodCall] call to method Sink
# 14| 0: [LocalVariableAccess] access to local variable a
# 15| 7: [ExprStmt] ...;
# 15| 0: [MethodCall] call to method Sink
# 15| 0: [LocalVariableAccess] access to local variable b
# 16| 8: [ExprStmt] ...;
# 16| 0: [MethodCall] call to method Sink
# 16| 0: [LocalVariableAccess] access to local variable c
# 18| 9: [ExprStmt] ...;
# 18| 0: [AssignExpr] ... = ...
# 18| 0: [TupleExpr] (..., ...)
# 18| 0: [LocalVariableDeclExpr] String p
# 18| 1: [LocalVariableDeclExpr] (Int32,String) q
# 18| 1: [LocalVariableAccess] access to local variable x
# 19| 10: [ExprStmt] ...;
# 19| 0: [MethodCall] call to method Sink
# 19| 0: [LocalVariableAccess] access to local variable p
# 20| 11: [ExprStmt] ...;
# 20| 0: [MethodCall] call to method Sink
# 20| 0: [FieldAccess] access to field Item1
# 20| -1: [LocalVariableAccess] access to local variable q
# 21| 12: [ExprStmt] ...;
# 21| 0: [MethodCall] call to method Sink
# 21| 0: [FieldAccess] access to field Item2
# 21| -1: [LocalVariableAccess] access to local variable q
# 23| 13: [ExprStmt] ...;
# 23| 0: [MethodCall] call to method Sink
# 23| 0: [FieldAccess] access to field Item1
# 23| -1: [LocalVariableAccess] access to local variable x
# 24| 14: [ExprStmt] ...;
# 24| 0: [MethodCall] call to method Sink
# 24| 0: [FieldAccess] access to field Item1
# 24| -1: [LocalVariableAccess] access to local variable x
# 25| 15: [ExprStmt] ...;
# 25| 0: [MethodCall] call to method Sink
# 25| 0: [FieldAccess] access to field Item1
# 25| -1: [FieldAccess] access to field Item2
# 25| -1: [LocalVariableAccess] access to local variable x
# 26| 16: [ExprStmt] ...;
# 26| 0: [MethodCall] call to method Sink
# 26| 0: [FieldAccess] access to field Item2
# 26| -1: [FieldAccess] access to field Item2
# 26| -1: [LocalVariableAccess] access to local variable x
# 29| 6: [Method] M2
# 29| -1: [TypeMention] Void
# 30| 4: [BlockStmt] {...}
# 31| 0: [LocalVariableDeclStmt] ... ...;
# 31| 0: [LocalVariableDeclAndInitExpr] (String,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,String) x = ...
# 31| -1: [TypeMention] (string, int, int, int, int, int, int, int, int, string)
# 31| 0: [LocalVariableAccess] access to local variable x
# 31| 1: [TupleExpr] (..., ...)
# 31| 0: [StringLiteral] "taint source"
# 31| 1: [IntLiteral] 2
# 31| 2: [IntLiteral] 3
# 31| 3: [IntLiteral] 4
# 31| 4: [IntLiteral] 5
# 31| 5: [IntLiteral] 6
# 31| 6: [IntLiteral] 7
# 31| 7: [IntLiteral] 8
# 31| 8: [IntLiteral] 9
# 31| 9: [StringLiteral] "taint source"
# 32| 1: [ExprStmt] ...;
# 32| 0: [MethodCall] call to method Sink
# 32| 0: [FieldAccess] access to field Item1
# 32| -1: [LocalVariableAccess] access to local variable x
# 33| 2: [ExprStmt] ...;
# 33| 0: [MethodCall] call to method Sink
# 33| 0: [FieldAccess] access to field Item2
# 33| -1: [LocalVariableAccess] access to local variable x
# 34| 3: [ExprStmt] ...;
# 34| 0: [MethodCall] call to method Sink
# 34| 0: [FieldAccess] access to field Item10
# 34| -1: [LocalVariableAccess] access to local variable x
# 37| 7: [Method] M3
# 37| -1: [TypeMention] Void
# 38| 4: [BlockStmt] {...}
# 39| 0: [LocalVariableDeclStmt] ... ...;
# 39| 0: [LocalVariableDeclAndInitExpr] (String,Int32,Int32) x = ...
# 39| -1: [TypeMention] (string, int, int)
# 39| 0: [LocalVariableAccess] access to local variable x
# 39| 1: [CastExpr] (...) ...
# 39| 0: [TypeAccess] access to type (String,Int32,Int32)
# 39| 0: [TypeMention] (string, int, int)
# 39| 1: [TypeMention] string
# 39| 2: [TypeMention] int
# 39| 3: [TypeMention] int
# 39| 1: [TupleExpr] (..., ...)
# 39| 0: [StringLiteral] "taint source"
# 39| 1: [IntLiteral] 2
# 39| 2: [IntLiteral] 3
# 40| 1: [ExprStmt] ...;
# 40| 0: [MethodCall] call to method Sink
# 40| 0: [FieldAccess] access to field Item1
# 40| -1: [LocalVariableAccess] access to local variable x
# 41| 2: [ExprStmt] ...;
# 41| 0: [MethodCall] call to method Sink
# 41| 0: [FieldAccess] access to field Item2
# 41| -1: [LocalVariableAccess] access to local variable x
# 43| 3: [LocalVariableDeclStmt] ... ...;
# 43| 0: [LocalVariableDeclAndInitExpr] (Object,Int32,Int32) y = ...
# 43| -1: [TypeMention] (object, int, int)
# 43| 0: [LocalVariableAccess] access to local variable y
# 43| 1: [CastExpr] (...) ...
# 43| 0: [TypeAccess] access to type (Object,Int32,Int32)
# 43| 0: [TypeMention] (object, int, int)
# 43| 1: [TypeMention] object
# 43| 2: [TypeMention] int
# 43| 3: [TypeMention] int
# 43| 1: [CastExpr] (...) ...
# 43| 1: [TupleExpr] (..., ...)
# 43| 0: [StringLiteral] "taint source"
# 43| 1: [IntLiteral] 2
# 43| 2: [IntLiteral] 3
# 44| 4: [ExprStmt] ...;
# 44| 0: [MethodCall] call to method Sink
# 44| 0: [FieldAccess] access to field Item1
# 44| -1: [LocalVariableAccess] access to local variable y
# 45| 5: [ExprStmt] ...;
# 45| 0: [MethodCall] call to method Sink
# 45| 0: [FieldAccess] access to field Item2
# 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 = ...
# 50| -1: [TypeMention] (string, (int, string), int)
# 50| 0: [LocalVariableAccess] access to local variable x
# 50| 1: [TupleExpr] (..., ...)
# 50| 0: [StringLiteral] "taint source"
# 50| 1: [TupleExpr] (..., ...)
# 50| 0: [IntLiteral] 2
# 50| 1: [StringLiteral] "taint source"
# 50| 2: [IntLiteral] 3
# 51| 1: [SwitchStmt] switch (...) {...}
# 51| 0: [LocalVariableAccess] access to local variable x
# 53| 0: [CaseStmt] case ...:
# 53| 0: [VariablePatternExpr] (String,(Int32,String),Int32) t
# 53| 0: [TypeMention] (string, (int, string), int)
# 53| 1: [TypeMention] string
# 53| 2: [TypeMention] (int, string)
# 53| 1: [TypeMention] int
# 53| 2: [TypeMention] string
# 53| 3: [TypeMention] int
# 53| 1: [GTExpr] ... > ...
# 53| 0: [FieldAccess] access to field Item3
# 53| -1: [LocalVariableAccess] access to local variable t
# 53| 1: [IntLiteral] 1
# 54| 1: [ExprStmt] ...;
# 54| 0: [MethodCall] call to method Sink
# 54| 0: [FieldAccess] access to field Item1
# 54| -1: [LocalVariableAccess] access to local variable t
# 55| 2: [ExprStmt] ...;
# 55| 0: [MethodCall] call to method Sink
# 55| 0: [FieldAccess] access to field Item2
# 55| -1: [FieldAccess] access to field Item2
# 55| -1: [LocalVariableAccess] access to local variable t
# 56| 3: [ExprStmt] ...;
# 56| 0: [MethodCall] call to method Sink
# 56| 0: [FieldAccess] access to field Item1
# 56| -1: [FieldAccess] access to field Item2
# 56| -1: [LocalVariableAccess] access to local variable t
# 57| 4: [BreakStmt] break;
# 58| 5: [CaseStmt] case ...:
# 58| 0: [TupleExpr] (..., ...)
# 58| 0: [LocalVariableDeclExpr] String a
# 58| 1: [TupleExpr] (..., ...)
# 58| 0: [LocalVariableDeclExpr] Int32 b
# 58| 1: [LocalVariableDeclExpr] String c
# 58| 2: [DiscardExpr] _
# 59| 6: [ExprStmt] ...;
# 59| 0: [MethodCall] call to method Sink
# 59| 0: [LocalVariableAccess] access to local variable a
# 60| 7: [ExprStmt] ...;
# 60| 0: [MethodCall] call to method Sink
# 60| 0: [LocalVariableAccess] access to local variable c
# 61| 8: [ExprStmt] ...;
# 61| 0: [MethodCall] call to method Sink
# 61| 0: [LocalVariableAccess] access to local variable b
# 62| 9: [BreakStmt] break;
# 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: [ParameterAccess] access to parameter s
# 65| 1: [TupleExpr] (..., ...)
# 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)
# 85| 0: [Parameter] r1
# 85| 1: [Parameter] r2
# 85| 13: [EQOperator] ==
#-----| 2: (Parameters)
# 85| 0: [Parameter] r1
# 85| 1: [Parameter] r2
# 85| 14: [Property] EqualityContract
# 85| 3: [Getter] get_EqualityContract
# 85| 15: [InstanceConstructor] R1
#-----| 2: (Parameters)
# 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)
# 85| 0: [Parameter] value
# 85| 17: [Property] j
# 85| 3: [Getter] get_j
# 85| 4: [Setter] set_j
#-----| 2: (Parameters)
# 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)
# 105| 0: [TypeParameter] T
#-----| 2: (Parameters)
# 105| 0: [Parameter] x
# 105| -1: [TypeMention] T
# 105| 4: [BlockStmt] {...}
# 108| [NamespaceDeclaration] namespace ... { ... }
# 110| 1: [Class] IsExternalInit

View File

@@ -0,0 +1 @@
semmle/code/csharp/PrintAst.ql

View File

@@ -0,0 +1,111 @@
using System;
class Tuples
{
static void M1()
{
var x = (a: "taint source", (1, "taint source"));
var (a, (b, c)) = x;
Sink(a); // Tainted
Sink(b);
Sink(c); // Tainted
(a, (b, c)) = x;
Sink(a); // Tainted
Sink(b);
Sink(c); // Tainted
(var p, var q) = x;
Sink(p); // Tainted
Sink(q.Item1);
Sink(q.Item2); // Tainted
Sink(x.Item1); // Tainted
Sink(x.a); // Tainted
Sink(x.Item2.Item1);
Sink(x.Item2.Item2); // Tainted
}
static void M2()
{
var x = ("taint source", 2, 3, 4, 5, 6, 7, 8, 9, "taint source");
Sink(x.Item1); // Tainted
Sink(x.Item2);
Sink(x.Item10); // Tainted
}
static void M3()
{
var x = (ValueTuple<string, int, int>)("taint source", 2, 3);
Sink(x.Item1); // Tainted
Sink(x.Item2);
var y = (ValueTuple<object, int, int>)("taint source", 2, 3);
Sink(y.Item1); // Tainted, not found
Sink(y.Item2);
}
static void M4(string s)
{
var x = ("taint source", (2, "taint source"), 3);
switch (x)
{
case ValueTuple<string, (int, string), int> t when t.Item3 > 1:
Sink(t.Item1); // Tainted
Sink(t.Item2.Item2); // Tainted
Sink(t.Item2.Item1);
break;
case var (a, (b, c), _):
Sink(a); // Tainted
Sink(c); // Tainted
Sink(b);
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
Sink(r); // Tainted
Sink(q);
}
}
record R1(string i, int j) { };
static void M5()
{
var r = new R1("taint source", 1);
Sink(r.i); // Tainted
var (a, b) = r;
Sink(a); // Tainted, not found
Sink(b);
switch (r)
{
case var (x, y):
Sink(x); // Tainted, not found
Sink(y);
break;
}
}
static void Sink<T>(T x) { }
}
namespace System.Runtime.CompilerServices
{
public class IsExternalInit { }
}

View File

@@ -0,0 +1,166 @@
edges
| Tuples.cs:7:17:7:56 | (..., ...) [Item1] : String | Tuples.cs:8:9:8:23 | (..., ...) [Item1] : String |
| Tuples.cs:7:17:7:56 | (..., ...) [Item1] : String | Tuples.cs:13:9:13:19 | (..., ...) [Item1] : String |
| Tuples.cs:7:17:7:56 | (..., ...) [Item1] : String | Tuples.cs:18:9:18:22 | (..., ...) [Item1] : String |
| Tuples.cs:7:17:7:56 | (..., ...) [Item1] : String | Tuples.cs:23:14:23:14 | access to local variable x [Item1] : String |
| Tuples.cs:7:17:7:56 | (..., ...) [Item1] : String | Tuples.cs:24:14:24:14 | access to local variable x [Item1] : String |
| Tuples.cs:7:17:7:56 | (..., ...) [Item2, Item2] : String | Tuples.cs:8:9:8:23 | (..., ...) [Item2, Item2] : String |
| Tuples.cs:7:17:7:56 | (..., ...) [Item2, Item2] : String | Tuples.cs:13:9:13:19 | (..., ...) [Item2, Item2] : String |
| Tuples.cs:7:17:7:56 | (..., ...) [Item2, Item2] : String | Tuples.cs:18:9:18:22 | (..., ...) [Item2, Item2] : String |
| Tuples.cs:7:17:7:56 | (..., ...) [Item2, Item2] : String | Tuples.cs:26:14:26:14 | access to local variable x [Item2, Item2] : String |
| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:17:7:56 | (..., ...) [Item1] : String |
| Tuples.cs:7:37:7:55 | (..., ...) [Item2] : String | Tuples.cs:7:17:7:56 | (..., ...) [Item2, Item2] : String |
| Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:7:37:7:55 | (..., ...) [Item2] : String |
| Tuples.cs:8:9:8:23 | (..., ...) [Item1] : String | Tuples.cs:8:9:8:27 | SSA def(a) : String |
| Tuples.cs:8:9:8:23 | (..., ...) [Item2, Item2] : String | Tuples.cs:8:9:8:23 | (..., ...) [Item2] : String |
| Tuples.cs:8:9:8:23 | (..., ...) [Item2] : String | Tuples.cs:8:9:8:27 | SSA def(c) : String |
| Tuples.cs:8:9:8:27 | SSA def(a) : String | Tuples.cs:9:14:9:14 | access to local variable a |
| Tuples.cs:8:9:8:27 | SSA def(c) : String | Tuples.cs:11:14:11:14 | access to local variable c |
| Tuples.cs:13:9:13:19 | (..., ...) [Item1] : String | Tuples.cs:13:9:13:23 | SSA def(a) : String |
| Tuples.cs:13:9:13:19 | (..., ...) [Item2, Item2] : String | Tuples.cs:13:13:13:18 | (..., ...) [Item2] : String |
| Tuples.cs:13:9:13:23 | SSA def(a) : String | Tuples.cs:14:14:14:14 | access to local variable a |
| Tuples.cs:13:9:13:23 | SSA def(c) : String | Tuples.cs:16:14:16:14 | access to local variable c |
| Tuples.cs:13:13:13:18 | (..., ...) [Item2] : String | Tuples.cs:13:9:13:23 | SSA def(c) : String |
| Tuples.cs:18:9:18:22 | (..., ...) [Item1] : String | Tuples.cs:18:9:18:26 | SSA def(p) : String |
| Tuples.cs:18:9:18:22 | (..., ...) [Item2, Item2] : String | Tuples.cs:18:9:18:26 | SSA def(q) [Item2] : String |
| Tuples.cs:18:9:18:26 | SSA def(p) : String | Tuples.cs:19:14:19:14 | access to local variable p |
| Tuples.cs:18:9:18:26 | SSA def(q) [Item2] : String | Tuples.cs:21:14:21:14 | access to local variable q [Item2] : String |
| Tuples.cs:21:14:21:14 | access to local variable q [Item2] : String | Tuples.cs:21:14:21:20 | access to field Item2 |
| Tuples.cs:23:14:23:14 | access to local variable x [Item1] : String | Tuples.cs:23:14:23:20 | access to field Item1 |
| Tuples.cs:24:14:24:14 | access to local variable x [Item1] : String | Tuples.cs:24:14:24:16 | access to field Item1 |
| Tuples.cs:26:14:26:14 | access to local variable x [Item2, Item2] : String | Tuples.cs:26:14:26:20 | access to field Item2 [Item2] : String |
| Tuples.cs:26:14:26:20 | access to field Item2 [Item2] : String | Tuples.cs:26:14:26:26 | access to field Item2 |
| Tuples.cs:31:17:31:72 | (..., ...) [Item1] : String | Tuples.cs:32:14:32:14 | access to local variable x [Item1] : String |
| Tuples.cs:31:17:31:72 | (..., ...) [Item10] : String | Tuples.cs:34:14:34:14 | access to local variable x [Item10] : String |
| Tuples.cs:31:18:31:31 | "taint source" : String | Tuples.cs:31:17:31:72 | (..., ...) [Item1] : String |
| Tuples.cs:31:58:31:71 | "taint source" : String | Tuples.cs:31:17:31:72 | (..., ...) [Item10] : String |
| Tuples.cs:32:14:32:14 | access to local variable x [Item1] : String | Tuples.cs:32:14:32:20 | access to field Item1 |
| Tuples.cs:34:14:34:14 | access to local variable x [Item10] : String | Tuples.cs:34:14:34:21 | access to field Item10 |
| Tuples.cs:39:17:39:68 | (...) ... [Item1] : String | Tuples.cs:40:14:40:14 | access to local variable x [Item1] : String |
| Tuples.cs:39:47:39:68 | (..., ...) [Item1] : String | Tuples.cs:39:17:39:68 | (...) ... [Item1] : String |
| Tuples.cs:39:48:39:61 | "taint source" : String | Tuples.cs:39:47:39:68 | (..., ...) [Item1] : String |
| 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: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: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 |
| Tuples.cs:53:18:53:57 | SSA def(t) [Item1] : String | Tuples.cs:54:22:54:22 | access to local variable t [Item1] : String |
| Tuples.cs:53:18:53:57 | SSA def(t) [Item2, Item2] : String | Tuples.cs:55:22:55:22 | access to local variable t [Item2, Item2] : String |
| Tuples.cs:54:22:54:22 | access to local variable t [Item1] : String | Tuples.cs:54:22:54:28 | access to field Item1 |
| Tuples.cs:55:22:55:22 | access to local variable t [Item2, Item2] : String | Tuples.cs:55:22:55:28 | access to field Item2 [Item2] : String |
| Tuples.cs:55:22:55:28 | access to field Item2 [Item2] : String | Tuples.cs:55:22:55:34 | access to field Item2 |
| Tuples.cs:58:18:58:35 | (..., ...) [Item1] : String | Tuples.cs:58:23:58:23 | SSA def(a) : String |
| Tuples.cs:58:18:58:35 | (..., ...) [Item2, Item2] : String | Tuples.cs:58:18:58:35 | (..., ...) [Item2] : String |
| 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: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 |
| Tuples.cs:7:21:7:34 | "taint source" : String | semmle.label | "taint source" : String |
| Tuples.cs:7:37:7:55 | (..., ...) [Item2] : String | semmle.label | (..., ...) [Item2] : String |
| Tuples.cs:7:41:7:54 | "taint source" : String | semmle.label | "taint source" : String |
| Tuples.cs:8:9:8:23 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
| Tuples.cs:8:9:8:23 | (..., ...) [Item2, Item2] : String | semmle.label | (..., ...) [Item2, Item2] : String |
| Tuples.cs:8:9:8:23 | (..., ...) [Item2] : String | semmle.label | (..., ...) [Item2] : String |
| Tuples.cs:8:9:8:27 | SSA def(a) : String | semmle.label | SSA def(a) : String |
| Tuples.cs:8:9:8:27 | SSA def(c) : String | semmle.label | SSA def(c) : String |
| Tuples.cs:9:14:9:14 | access to local variable a | semmle.label | access to local variable a |
| Tuples.cs:11:14:11:14 | access to local variable c | semmle.label | access to local variable c |
| Tuples.cs:13:9:13:19 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
| Tuples.cs:13:9:13:19 | (..., ...) [Item2, Item2] : String | semmle.label | (..., ...) [Item2, Item2] : String |
| Tuples.cs:13:9:13:23 | SSA def(a) : String | semmle.label | SSA def(a) : String |
| Tuples.cs:13:9:13:23 | SSA def(c) : String | semmle.label | SSA def(c) : String |
| Tuples.cs:13:13:13:18 | (..., ...) [Item2] : String | semmle.label | (..., ...) [Item2] : String |
| Tuples.cs:14:14:14:14 | access to local variable a | semmle.label | access to local variable a |
| Tuples.cs:16:14:16:14 | access to local variable c | semmle.label | access to local variable c |
| Tuples.cs:18:9:18:22 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
| Tuples.cs:18:9:18:22 | (..., ...) [Item2, Item2] : String | semmle.label | (..., ...) [Item2, Item2] : String |
| Tuples.cs:18:9:18:26 | SSA def(p) : String | semmle.label | SSA def(p) : String |
| Tuples.cs:18:9:18:26 | SSA def(q) [Item2] : String | semmle.label | SSA def(q) [Item2] : String |
| Tuples.cs:19:14:19:14 | access to local variable p | semmle.label | access to local variable p |
| Tuples.cs:21:14:21:14 | access to local variable q [Item2] : String | semmle.label | access to local variable q [Item2] : String |
| Tuples.cs:21:14:21:20 | access to field Item2 | semmle.label | access to field Item2 |
| Tuples.cs:23:14:23:14 | access to local variable x [Item1] : String | semmle.label | access to local variable x [Item1] : String |
| Tuples.cs:23:14:23:20 | access to field Item1 | semmle.label | access to field Item1 |
| Tuples.cs:24:14:24:14 | access to local variable x [Item1] : String | semmle.label | access to local variable x [Item1] : String |
| Tuples.cs:24:14:24:16 | access to field Item1 | semmle.label | access to field Item1 |
| Tuples.cs:26:14:26:14 | access to local variable x [Item2, Item2] : String | semmle.label | access to local variable x [Item2, Item2] : String |
| Tuples.cs:26:14:26:20 | access to field Item2 [Item2] : String | semmle.label | access to field Item2 [Item2] : String |
| Tuples.cs:26:14:26:26 | access to field Item2 | semmle.label | access to field Item2 |
| Tuples.cs:31:17:31:72 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
| Tuples.cs:31:17:31:72 | (..., ...) [Item10] : String | semmle.label | (..., ...) [Item10] : String |
| Tuples.cs:31:18:31:31 | "taint source" : String | semmle.label | "taint source" : String |
| Tuples.cs:31:58:31:71 | "taint source" : String | semmle.label | "taint source" : String |
| Tuples.cs:32:14:32:14 | access to local variable x [Item1] : String | semmle.label | access to local variable x [Item1] : String |
| Tuples.cs:32:14:32:20 | access to field Item1 | semmle.label | access to field Item1 |
| Tuples.cs:34:14:34:14 | access to local variable x [Item10] : String | semmle.label | access to local variable x [Item10] : String |
| Tuples.cs:34:14:34:21 | access to field Item10 | semmle.label | access to field Item10 |
| Tuples.cs:39:17:39:68 | (...) ... [Item1] : String | semmle.label | (...) ... [Item1] : String |
| Tuples.cs:39:47:39:68 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
| Tuples.cs:39:48:39:61 | "taint source" : String | semmle.label | "taint source" : String |
| Tuples.cs:40:14:40:14 | access to local variable x [Item1] : String | semmle.label | access to local variable x [Item1] : String |
| Tuples.cs:40:14:40:20 | access to field Item1 | semmle.label | access to field Item1 |
| Tuples.cs:50:17:50:56 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
| Tuples.cs:50:17:50:56 | (..., ...) [Item2, Item2] : String | semmle.label | (..., ...) [Item2, Item2] : String |
| Tuples.cs:50:18:50:31 | "taint source" : String | semmle.label | "taint source" : String |
| Tuples.cs:50:34:50:52 | (..., ...) [Item2] : String | semmle.label | (..., ...) [Item2] : String |
| Tuples.cs:50:38:50:51 | "taint source" : String | semmle.label | "taint source" : String |
| Tuples.cs:53:18:53:57 | SSA def(t) [Item1] : String | semmle.label | SSA def(t) [Item1] : String |
| Tuples.cs:53:18:53:57 | SSA def(t) [Item2, Item2] : String | semmle.label | SSA def(t) [Item2, Item2] : String |
| Tuples.cs:54:22:54:22 | access to local variable t [Item1] : String | semmle.label | access to local variable t [Item1] : String |
| Tuples.cs:54:22:54:28 | access to field Item1 | semmle.label | access to field Item1 |
| Tuples.cs:55:22:55:22 | access to local variable t [Item2, Item2] : String | semmle.label | access to local variable t [Item2, Item2] : String |
| Tuples.cs:55:22:55:28 | access to field Item2 [Item2] : String | semmle.label | access to field Item2 [Item2] : String |
| Tuples.cs:55:22:55:34 | access to field Item2 | semmle.label | access to field Item2 |
| Tuples.cs:58:18:58:35 | (..., ...) [Item1] : String | semmle.label | (..., ...) [Item1] : String |
| Tuples.cs:58:18:58:35 | (..., ...) [Item2, Item2] : String | semmle.label | (..., ...) [Item2, Item2] : String |
| Tuples.cs:58:18:58:35 | (..., ...) [Item2] : String | semmle.label | (..., ...) [Item2] : String |
| Tuples.cs:58:23:58:23 | SSA def(a) : String | semmle.label | SSA def(a) : String |
| 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: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 |
| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:19:14:19:14 | access to local variable p | $@ | Tuples.cs:19:14:19:14 | access to local variable p | access to local variable p |
| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:23:14:23:20 | access to field Item1 | $@ | Tuples.cs:23:14:23:20 | access to field Item1 | access to field Item1 |
| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:24:14:24:16 | access to field Item1 | $@ | Tuples.cs:24:14:24:16 | access to field Item1 | access to field Item1 |
| Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:11:14:11:14 | access to local variable c | $@ | Tuples.cs:11:14:11:14 | access to local variable c | access to local variable c |
| Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:16:14:16:14 | access to local variable c | $@ | Tuples.cs:16:14:16:14 | access to local variable c | access to local variable c |
| Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:21:14:21:20 | access to field Item2 | $@ | Tuples.cs:21:14:21:20 | access to field Item2 | access to field Item2 |
| Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:26:14:26:26 | access to field Item2 | $@ | Tuples.cs:26:14:26:26 | access to field Item2 | access to field Item2 |
| Tuples.cs:31:18:31:31 | "taint source" : String | Tuples.cs:31:18:31:31 | "taint source" : String | Tuples.cs:32:14:32:20 | access to field Item1 | $@ | Tuples.cs:32:14:32:20 | access to field Item1 | access to field Item1 |
| Tuples.cs:31:58:31:71 | "taint source" : String | Tuples.cs:31:58:31:71 | "taint source" : String | Tuples.cs:34:14:34:21 | access to field Item10 | $@ | Tuples.cs:34:14:34:21 | access to field Item10 | access to field Item10 |
| 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: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: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 |

View File

@@ -0,0 +1,25 @@
/**
* @kind path-problem
*/
import csharp
import DataFlow::PathGraph
class Conf extends DataFlow::Configuration {
Conf() { this = "TuplesConf" }
override predicate isSource(DataFlow::Node src) {
src.asExpr().(StringLiteral).getValue() = "taint source"
}
override predicate isSink(DataFlow::Node sink) {
exists(MethodCall mc |
mc.getTarget().hasName("Sink") and
mc.getAnArgument() = sink.asExpr()
)
}
}
from DataFlow::PathNode source, DataFlow::PathNode sink, Conf conf
where conf.hasFlowPath(source, sink)
select source, source, sink, "$@", sink, sink.toString()

View File

@@ -7,7 +7,6 @@ constrainedTypeParameterSubsumes
| Unification.cs:8:10:8:11 | T2 | Unification.cs:30:12:30:24 | (string, int) |
| Unification.cs:8:10:8:11 | T2 | Unification.cs:31:12:31:23 | (string, T9) |
| Unification.cs:8:10:8:11 | T2 | Unification.cs:32:12:32:19 | (T8, T9) |
| Unification.cs:8:10:8:11 | T2 | Unification.cs:33:12:33:23 | (T8, T9) |
| Unification.cs:9:10:9:11 | T3 | Unification.cs:1:11:1:12 | I1 |
| Unification.cs:9:10:9:11 | T3 | Unification.cs:6:7:6:8 | C0 |
| Unification.cs:9:10:9:11 | T3 | Unification.cs:7:7:7:12 | C1<C0> |
@@ -97,7 +96,6 @@ constrainedTypeParameterSubsumes
| Unification.cs:12:25:12:27 | T6d | Unification.cs:30:12:30:24 | (string, int) |
| Unification.cs:12:25:12:27 | T6d | Unification.cs:31:12:31:23 | (string, T9) |
| Unification.cs:12:25:12:27 | T6d | Unification.cs:32:12:32:19 | (T8, T9) |
| Unification.cs:12:25:12:27 | T6d | Unification.cs:33:12:33:23 | (T8, T9) |
| Unification.cs:24:12:24:13 | Tm | Unification.cs:8:7:8:12 | C2<S2> |
| Unification.cs:24:12:24:13 | Tm | Unification.cs:24:12:24:13 | Tm |
constrainedTypeParameterSubsumptionImpliesUnification
@@ -110,7 +108,6 @@ constrainedTypeParameterUnifiable
| Unification.cs:8:10:8:11 | T2 | Unification.cs:30:12:30:24 | (string, int) |
| Unification.cs:8:10:8:11 | T2 | Unification.cs:31:12:31:23 | (string, T9) |
| Unification.cs:8:10:8:11 | T2 | Unification.cs:32:12:32:19 | (T8, T9) |
| Unification.cs:8:10:8:11 | T2 | Unification.cs:33:12:33:23 | (T8, T9) |
| Unification.cs:9:10:9:11 | T3 | Unification.cs:1:11:1:12 | I1 |
| Unification.cs:9:10:9:11 | T3 | Unification.cs:6:7:6:8 | C0 |
| Unification.cs:9:10:9:11 | T3 | Unification.cs:7:7:7:12 | C1<C0> |
@@ -208,7 +205,6 @@ constrainedTypeParameterUnifiable
| Unification.cs:12:25:12:27 | T6d | Unification.cs:30:12:30:24 | (string, int) |
| Unification.cs:12:25:12:27 | T6d | Unification.cs:31:12:31:23 | (string, T9) |
| Unification.cs:12:25:12:27 | T6d | Unification.cs:32:12:32:19 | (T8, T9) |
| Unification.cs:12:25:12:27 | T6d | Unification.cs:33:12:33:23 | (T8, T9) |
| Unification.cs:24:12:24:13 | Tm | Unification.cs:8:7:8:12 | C2<S2> |
| Unification.cs:24:12:24:13 | Tm | Unification.cs:8:7:8:12 | C2<T2> |
| Unification.cs:24:12:24:13 | Tm | Unification.cs:24:12:24:13 | Tm |
@@ -284,12 +280,6 @@ subsumes
| Unification.cs:32:12:32:19 | (T8, T9) | Unification.cs:30:12:30:24 | (string, int) |
| Unification.cs:32:12:32:19 | (T8, T9) | Unification.cs:31:12:31:23 | (string, T9) |
| Unification.cs:32:12:32:19 | (T8, T9) | Unification.cs:32:12:32:19 | (T8, T9) |
| Unification.cs:32:12:32:19 | (T8, T9) | Unification.cs:33:12:33:23 | (T8, T9) |
| Unification.cs:33:12:33:23 | (T8, T9) | Unification.cs:29:12:29:20 | (T8, int) |
| Unification.cs:33:12:33:23 | (T8, T9) | Unification.cs:30:12:30:24 | (string, int) |
| Unification.cs:33:12:33:23 | (T8, T9) | Unification.cs:31:12:31:23 | (string, T9) |
| Unification.cs:33:12:33:23 | (T8, T9) | Unification.cs:32:12:32:19 | (T8, T9) |
| Unification.cs:33:12:33:23 | (T8, T9) | Unification.cs:33:12:33:23 | (T8, T9) |
| Unification.cs:36:7:36:17 | Nested<Int32> | Unification.cs:36:7:36:17 | Nested<Int32> |
| Unification.cs:36:7:36:17 | Nested<String> | Unification.cs:36:7:36:17 | Nested<String> |
| Unification.cs:36:7:36:17 | Nested<T10> | Unification.cs:36:7:36:17 | Nested<Int32> |
@@ -352,14 +342,11 @@ unifiable
| Unification.cs:12:7:12:28 | C6<C2<S2>, Tm, C3<Tm>, S2> | Unification.cs:12:7:12:28 | C6<T6a, T6b, T6c, T6d> |
| Unification.cs:29:12:29:20 | (T8, int) | Unification.cs:31:12:31:23 | (string, T9) |
| Unification.cs:29:12:29:20 | (T8, int) | Unification.cs:32:12:32:19 | (T8, T9) |
| Unification.cs:29:12:29:20 | (T8, int) | Unification.cs:33:12:33:23 | (T8, T9) |
| Unification.cs:30:12:30:24 | (string, int) | Unification.cs:29:12:29:20 | (T8, int) |
| Unification.cs:30:12:30:24 | (string, int) | Unification.cs:31:12:31:23 | (string, T9) |
| Unification.cs:30:12:30:24 | (string, int) | Unification.cs:32:12:32:19 | (T8, T9) |
| Unification.cs:30:12:30:24 | (string, int) | Unification.cs:33:12:33:23 | (T8, T9) |
| Unification.cs:31:12:31:23 | (string, T9) | Unification.cs:29:12:29:20 | (T8, int) |
| Unification.cs:31:12:31:23 | (string, T9) | Unification.cs:32:12:32:19 | (T8, T9) |
| Unification.cs:31:12:31:23 | (string, T9) | Unification.cs:33:12:33:23 | (T8, T9) |
| Unification.cs:36:7:36:17 | Nested<Int32> | Unification.cs:36:7:36:17 | Nested<T10> |
| Unification.cs:36:7:36:17 | Nested<String> | Unification.cs:36:7:36:17 | Nested<T10> |
| Unification.cs:38:11:38:22 | Nested<Int32>.NestedA<String> | Unification.cs:38:11:38:22 | Nested<>.NestedA<T11> |