mirror of
https://github.com/github/codeql.git
synced 2026-04-28 10:15:14 +02:00
Merge pull request #5242 from tamasvajk/feature/tuple-df
C#: Add tuple dataflow
This commit is contained in:
3
csharp/change-notes/2021-02-26-tuple-dataflow.md
Normal file
3
csharp/change-notes/2021-02-26-tuple-dataflow.md
Normal 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.
|
||||
@@ -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>
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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) |
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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) |
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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 |
|
||||
@@ -0,0 +1,5 @@
|
||||
import csharp
|
||||
|
||||
from DataFlow::Node pred, DataFlow::Node succ
|
||||
where DataFlow::localFlowStep(pred, succ)
|
||||
select pred, succ
|
||||
360
csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected
Normal file
360
csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected
Normal 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
|
||||
@@ -0,0 +1 @@
|
||||
semmle/code/csharp/PrintAst.ql
|
||||
111
csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs
Normal file
111
csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs
Normal 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 { }
|
||||
}
|
||||
166
csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected
Normal file
166
csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected
Normal 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 |
|
||||
25
csharp/ql/test/library-tests/dataflow/tuples/Tuples.ql
Normal file
25
csharp/ql/test/library-tests/dataflow/tuples/Tuples.ql
Normal 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()
|
||||
@@ -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> |
|
||||
|
||||
Reference in New Issue
Block a user