Ruby: address comments

This commit is contained in:
Arthur Baars
2022-01-24 10:02:54 +01:00
parent 5df1f7a0c3
commit 0cef887683
8 changed files with 166 additions and 162 deletions

View File

@@ -210,7 +210,7 @@ class FindPattern extends CasePattern, TFindPattern {
CasePattern getAnElement() { result = this.getElement(_) }
/**
* Gets the variable for the prefix of this list pattern, if any. For example `init` in:
* Gets the variable for the prefix of this find pattern, if any. For example `init` in:
* ```rb
* in List[*init, "a", Integer => x, *tail]
* ```
@@ -220,7 +220,7 @@ class FindPattern extends CasePattern, TFindPattern {
}
/**
* Gets the variable for the suffix of this list pattern, if any. For example `tail` in:
* Gets the variable for the suffix of this find pattern, if any. For example `tail` in:
* ```rb
* in List[*init, "a", Integer => x, *tail]
* ```

View File

@@ -412,9 +412,7 @@ module ExprNodes {
class InClauseCfgNode extends AstCfgNode {
override InClauseChildMapping e;
/**
* Gets the pattern in this `in`-clause.
*/
/** Gets the pattern in this `in`-clause. */
final AstCfgNode getPattern() { e.hasCfgChild(e.getPattern(), this, result) }
/** Gets the pattern guard condition in this `in` clause, if any. */
@@ -449,7 +447,7 @@ module ExprNodes {
}
}
/** A control-flow node that wraps a `ArrayPattern` node. */
/** A control-flow node that wraps an `ArrayPattern` node. */
class ArrayPatternCfgNode extends CasePatternCfgNode {
override ArrayPatternChildMapping e;
@@ -484,12 +482,12 @@ module ExprNodes {
/** Gets the `n`th element of this find pattern. */
final CasePatternCfgNode getElement(int n) { e.hasCfgChild(e.getElement(n), this, result) }
/** Gets the variable for the prefix of this list pattern, if any. */
/** Gets the variable for the prefix of this find pattern, if any. */
final VariableWriteAccessCfgNode getPrefixVariableAccess() {
e.hasCfgChild(e.getPrefixVariableAccess(), this, result)
}
/** Gets the variable for the suffix of this list pattern, if any. */
/** Gets the variable for the suffix of this find pattern, if any. */
final VariableWriteAccessCfgNode getSuffixVariableAccess() {
e.hasCfgChild(e.getSuffixVariableAccess(), this, result)
}
@@ -519,7 +517,7 @@ module ExprNodes {
override predicate relevantChild(AstNode e) { e = this.getAnAlternative() }
}
/** A control-flow node that wraps a `AlternativePattern` node. */
/** A control-flow node that wraps an `AlternativePattern` node. */
class AlternativePatternCfgNode extends CasePatternCfgNode {
override AlternativePatternChildMapping e;
@@ -535,7 +533,7 @@ module ExprNodes {
}
}
/** A control-flow node that wraps a `AsPattern` node. */
/** A control-flow node that wraps an `AsPattern` node. */
class AsPatternCfgNode extends CasePatternCfgNode {
override AsPatternChildMapping e;

View File

@@ -133,7 +133,7 @@ module LocalFlow {
or
nodeFrom.asExpr() = branch.(CfgNodes::ExprNodes::WhenClauseCfgNode).getBody()
or
nodeFrom.asExpr() = branch and branch instanceof CfgNodes::ExprCfgNode
nodeFrom.asExpr() = branch.(CfgNodes::ExprCfgNode)
)
or
exists(CfgNodes::ExprCfgNode exprTo, ReturningStatementNode n |

View File

@@ -29,35 +29,41 @@ private CfgNodes::ExprNodes::VariableWriteAccessCfgNode variablesInPattern(
) {
result = p
or
exists(CfgNodes::ExprNodes::AsPatternCfgNode ap | p = ap |
result = variablesInPattern(ap.getPattern()) or
result = ap.getVariableAccess()
)
p =
any(CfgNodes::ExprNodes::AsPatternCfgNode ap |
result = variablesInPattern(ap.getPattern()) or
result = ap.getVariableAccess()
)
or
exists(CfgNodes::ExprNodes::ParenthesizedPatternCfgNode pp | p = pp |
result = variablesInPattern(pp.getPattern())
)
p =
any(CfgNodes::ExprNodes::ParenthesizedPatternCfgNode pp |
result = variablesInPattern(pp.getPattern())
)
or
exists(CfgNodes::ExprNodes::AlternativePatternCfgNode ap | p = ap |
result = variablesInPattern(ap.getAlternative(_))
)
p =
any(CfgNodes::ExprNodes::AlternativePatternCfgNode ap |
result = variablesInPattern(ap.getAlternative(_))
)
or
exists(CfgNodes::ExprNodes::ArrayPatternCfgNode ap | p = ap |
result = variablesInPattern(ap.getPrefixElement(_)) or
result = variablesInPattern(ap.getSuffixElement(_)) or
result = ap.getRestVariableAccess()
)
p =
any(CfgNodes::ExprNodes::ArrayPatternCfgNode ap |
result = variablesInPattern(ap.getPrefixElement(_)) or
result = variablesInPattern(ap.getSuffixElement(_)) or
result = ap.getRestVariableAccess()
)
or
exists(CfgNodes::ExprNodes::FindPatternCfgNode fp | p = fp |
result = variablesInPattern(fp.getElement(_)) or
result = fp.getPrefixVariableAccess() or
result = fp.getSuffixVariableAccess()
)
p =
any(CfgNodes::ExprNodes::FindPatternCfgNode fp |
result = variablesInPattern(fp.getElement(_)) or
result = fp.getPrefixVariableAccess() or
result = fp.getSuffixVariableAccess()
)
or
exists(CfgNodes::ExprNodes::HashPatternCfgNode hp | p = hp |
result = variablesInPattern(hp.getValue(_)) or
result = hp.getRestVariableAccess()
)
p =
any(CfgNodes::ExprNodes::HashPatternCfgNode hp |
result = variablesInPattern(hp.getValue(_)) or
result = hp.getRestVariableAccess()
)
}
/**

View File

@@ -72,15 +72,15 @@
| local_dataflow.rb:51:9:51:15 | "break" | local_dataflow.rb:51:3:51:15 | break |
| local_dataflow.rb:60:1:90:3 | self (test_case) | local_dataflow.rb:78:12:78:20 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:78:12:78:20 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:79:18:79:24 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:80:22:80:28 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:82:6:82:12 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:83:6:83:12 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:84:6:84:12 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:85:20:85:26 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:86:26:86:32 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:87:18:87:24 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:79:20:79:26 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:80:24:80:30 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:82:7:82:13 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:83:7:83:13 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:84:7:84:13 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:85:22:85:28 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:86:28:86:34 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:87:20:87:26 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:60:15:60:15 | x | local_dataflow.rb:60:15:60:15 | x |
| local_dataflow.rb:60:15:60:15 | x | local_dataflow.rb:61:12:61:12 | x |
| local_dataflow.rb:61:7:68:5 | case ... | local_dataflow.rb:61:3:68:5 | ... = ... |
@@ -111,58 +111,58 @@
| local_dataflow.rb:73:7:73:7 | x | local_dataflow.rb:72:7:73:7 | then ... |
| local_dataflow.rb:74:3:75:6 | else ... | local_dataflow.rb:69:7:76:5 | case ... |
| local_dataflow.rb:75:6:75:6 | x | local_dataflow.rb:74:3:75:6 | else ... |
| local_dataflow.rb:78:3:88:3 | ... = ... | local_dataflow.rb:89:6:89:6 | z |
| local_dataflow.rb:78:7:88:3 | case ... | local_dataflow.rb:78:3:88:3 | ... = ... |
| local_dataflow.rb:78:7:88:3 | case ... | local_dataflow.rb:78:3:88:3 | ... = ... |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:79:18:79:24 | self |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:80:22:80:28 | self |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:82:6:82:12 | self |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:85:20:85:26 | self |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:86:26:86:32 | self |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:87:18:87:24 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:79:18:79:24 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:80:22:80:28 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:82:6:82:12 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:85:20:85:26 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:86:26:86:32 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:87:18:87:24 | self |
| local_dataflow.rb:79:11:79:11 | b | local_dataflow.rb:79:23:79:23 | b |
| local_dataflow.rb:79:13:79:43 | then ... | local_dataflow.rb:78:7:88:3 | case ... |
| local_dataflow.rb:79:18:79:24 | [post] self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:79:18:79:24 | call to sink | local_dataflow.rb:79:13:79:43 | then ... |
| local_dataflow.rb:79:18:79:24 | self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:80:6:80:6 | a | local_dataflow.rb:80:11:80:11 | a |
| local_dataflow.rb:80:11:80:11 | [post] a | local_dataflow.rb:80:27:80:27 | a |
| local_dataflow.rb:80:11:80:11 | a | local_dataflow.rb:80:27:80:27 | a |
| local_dataflow.rb:80:17:80:47 | then ... | local_dataflow.rb:78:7:88:3 | case ... |
| local_dataflow.rb:80:22:80:28 | [post] self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:80:22:80:28 | call to sink | local_dataflow.rb:80:17:80:47 | then ... |
| local_dataflow.rb:80:22:80:28 | self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:81:7:81:7 | c | local_dataflow.rb:82:11:82:11 | c |
| local_dataflow.rb:81:11:81:11 | d | local_dataflow.rb:83:11:83:11 | d |
| local_dataflow.rb:81:14:81:14 | e | local_dataflow.rb:84:11:84:11 | e |
| local_dataflow.rb:81:18:84:32 | then ... | local_dataflow.rb:78:7:88:3 | case ... |
| local_dataflow.rb:81:23:84:13 | call to [] | local_dataflow.rb:81:18:84:32 | then ... |
| local_dataflow.rb:82:6:82:12 | [post] self | local_dataflow.rb:83:6:83:12 | self |
| local_dataflow.rb:82:6:82:12 | self | local_dataflow.rb:83:6:83:12 | self |
| local_dataflow.rb:83:6:83:12 | [post] self | local_dataflow.rb:84:6:84:12 | self |
| local_dataflow.rb:83:6:83:12 | self | local_dataflow.rb:84:6:84:12 | self |
| local_dataflow.rb:84:6:84:12 | [post] self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:84:6:84:12 | self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:85:11:85:11 | f | local_dataflow.rb:85:25:85:25 | f |
| local_dataflow.rb:85:15:85:45 | then ... | local_dataflow.rb:78:7:88:3 | case ... |
| local_dataflow.rb:85:20:85:26 | [post] self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:85:20:85:26 | call to sink | local_dataflow.rb:85:15:85:45 | then ... |
| local_dataflow.rb:85:20:85:26 | self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:86:16:86:16 | g | local_dataflow.rb:86:31:86:31 | g |
| local_dataflow.rb:86:21:86:51 | then ... | local_dataflow.rb:78:7:88:3 | case ... |
| local_dataflow.rb:86:26:86:32 | [post] self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:86:26:86:32 | call to sink | local_dataflow.rb:86:21:86:51 | then ... |
| local_dataflow.rb:86:26:86:32 | self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:87:8:87:8 | x | local_dataflow.rb:87:23:87:23 | x |
| local_dataflow.rb:87:13:87:46 | then ... | local_dataflow.rb:78:7:88:3 | case ... |
| local_dataflow.rb:87:18:87:24 | [post] self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:87:18:87:24 | self | local_dataflow.rb:89:1:89:7 | self |
| local_dataflow.rb:87:23:87:23 | [post] x | local_dataflow.rb:87:27:87:27 | x |
| local_dataflow.rb:87:23:87:23 | x | local_dataflow.rb:87:27:87:27 | x |
| local_dataflow.rb:87:27:87:27 | x | local_dataflow.rb:87:13:87:46 | then ... |
| local_dataflow.rb:78:3:88:5 | ... = ... | local_dataflow.rb:89:8:89:8 | z |
| local_dataflow.rb:78:7:88:5 | case ... | local_dataflow.rb:78:3:88:5 | ... = ... |
| local_dataflow.rb:78:7:88:5 | case ... | local_dataflow.rb:78:3:88:5 | ... = ... |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:79:20:79:26 | self |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:80:24:80:30 | self |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:82:7:82:13 | self |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:85:22:85:28 | self |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:86:28:86:34 | self |
| local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:87:20:87:26 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:79:20:79:26 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:80:24:80:30 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:82:7:82:13 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:85:22:85:28 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:86:28:86:34 | self |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:87:20:87:26 | self |
| local_dataflow.rb:79:13:79:13 | b | local_dataflow.rb:79:25:79:25 | b |
| local_dataflow.rb:79:15:79:45 | then ... | local_dataflow.rb:78:7:88:5 | case ... |
| local_dataflow.rb:79:20:79:26 | [post] self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:79:20:79:26 | call to sink | local_dataflow.rb:79:15:79:45 | then ... |
| local_dataflow.rb:79:20:79:26 | self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:80:8:80:8 | a | local_dataflow.rb:80:13:80:13 | a |
| local_dataflow.rb:80:13:80:13 | [post] a | local_dataflow.rb:80:29:80:29 | a |
| local_dataflow.rb:80:13:80:13 | a | local_dataflow.rb:80:29:80:29 | a |
| local_dataflow.rb:80:19:80:49 | then ... | local_dataflow.rb:78:7:88:5 | case ... |
| local_dataflow.rb:80:24:80:30 | [post] self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:80:24:80:30 | call to sink | local_dataflow.rb:80:19:80:49 | then ... |
| local_dataflow.rb:80:24:80:30 | self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:81:9:81:9 | c | local_dataflow.rb:82:12:82:12 | c |
| local_dataflow.rb:81:13:81:13 | d | local_dataflow.rb:83:12:83:12 | d |
| local_dataflow.rb:81:16:81:16 | e | local_dataflow.rb:84:12:84:12 | e |
| local_dataflow.rb:81:20:84:33 | then ... | local_dataflow.rb:78:7:88:5 | case ... |
| local_dataflow.rb:81:25:84:14 | call to [] | local_dataflow.rb:81:20:84:33 | then ... |
| local_dataflow.rb:82:7:82:13 | [post] self | local_dataflow.rb:83:7:83:13 | self |
| local_dataflow.rb:82:7:82:13 | self | local_dataflow.rb:83:7:83:13 | self |
| local_dataflow.rb:83:7:83:13 | [post] self | local_dataflow.rb:84:7:84:13 | self |
| local_dataflow.rb:83:7:83:13 | self | local_dataflow.rb:84:7:84:13 | self |
| local_dataflow.rb:84:7:84:13 | [post] self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:84:7:84:13 | self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:85:13:85:13 | f | local_dataflow.rb:85:27:85:27 | f |
| local_dataflow.rb:85:17:85:47 | then ... | local_dataflow.rb:78:7:88:5 | case ... |
| local_dataflow.rb:85:22:85:28 | [post] self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:85:22:85:28 | call to sink | local_dataflow.rb:85:17:85:47 | then ... |
| local_dataflow.rb:85:22:85:28 | self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:86:18:86:18 | g | local_dataflow.rb:86:33:86:33 | g |
| local_dataflow.rb:86:23:86:53 | then ... | local_dataflow.rb:78:7:88:5 | case ... |
| local_dataflow.rb:86:28:86:34 | [post] self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:86:28:86:34 | call to sink | local_dataflow.rb:86:23:86:53 | then ... |
| local_dataflow.rb:86:28:86:34 | self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:87:10:87:10 | x | local_dataflow.rb:87:25:87:25 | x |
| local_dataflow.rb:87:15:87:48 | then ... | local_dataflow.rb:78:7:88:5 | case ... |
| local_dataflow.rb:87:20:87:26 | [post] self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:87:20:87:26 | self | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:87:25:87:25 | [post] x | local_dataflow.rb:87:29:87:29 | x |
| local_dataflow.rb:87:25:87:25 | x | local_dataflow.rb:87:29:87:29 | x |
| local_dataflow.rb:87:29:87:29 | x | local_dataflow.rb:87:15:87:48 | then ... |

View File

@@ -12,7 +12,7 @@ ret
| local_dataflow.rb:50:3:50:13 | next |
| local_dataflow.rb:51:3:51:15 | break |
| local_dataflow.rb:52:3:52:10 | "normal" |
| local_dataflow.rb:89:1:89:7 | call to sink |
| local_dataflow.rb:89:3:89:9 | call to sink |
arg
| local_dataflow.rb:3:8:3:10 | self | local_dataflow.rb:3:8:3:10 | call to p | self |
| local_dataflow.rb:3:10:3:10 | a | local_dataflow.rb:3:8:3:10 | call to p | position 0 |
@@ -51,27 +51,27 @@ arg
| local_dataflow.rb:55:12:55:12 | 3 | local_dataflow.rb:55:5:55:13 | call to [] | position 2 |
| local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:78:12:78:20 | call to source | self |
| local_dataflow.rb:78:19:78:19 | 1 | local_dataflow.rb:78:12:78:20 | call to source | position 0 |
| local_dataflow.rb:79:18:79:24 | self | local_dataflow.rb:79:18:79:24 | call to sink | self |
| local_dataflow.rb:79:23:79:23 | b | local_dataflow.rb:79:18:79:24 | call to sink | position 0 |
| local_dataflow.rb:80:11:80:11 | a | local_dataflow.rb:80:11:80:15 | ... > ... | self |
| local_dataflow.rb:80:15:80:15 | 0 | local_dataflow.rb:80:11:80:15 | ... > ... | position 0 |
| local_dataflow.rb:80:22:80:28 | self | local_dataflow.rb:80:22:80:28 | call to sink | self |
| local_dataflow.rb:80:27:80:27 | a | local_dataflow.rb:80:22:80:28 | call to sink | position 0 |
| local_dataflow.rb:81:23:84:13 | Array | local_dataflow.rb:81:23:84:13 | call to [] | self |
| local_dataflow.rb:82:6:82:12 | call to sink | local_dataflow.rb:81:23:84:13 | call to [] | position 0 |
| local_dataflow.rb:82:6:82:12 | self | local_dataflow.rb:82:6:82:12 | call to sink | self |
| local_dataflow.rb:82:11:82:11 | c | local_dataflow.rb:82:6:82:12 | call to sink | position 0 |
| local_dataflow.rb:83:6:83:12 | call to sink | local_dataflow.rb:81:23:84:13 | call to [] | position 1 |
| local_dataflow.rb:83:6:83:12 | self | local_dataflow.rb:83:6:83:12 | call to sink | self |
| local_dataflow.rb:83:11:83:11 | d | local_dataflow.rb:83:6:83:12 | call to sink | position 0 |
| local_dataflow.rb:84:6:84:12 | call to sink | local_dataflow.rb:81:23:84:13 | call to [] | position 2 |
| local_dataflow.rb:84:6:84:12 | self | local_dataflow.rb:84:6:84:12 | call to sink | self |
| local_dataflow.rb:84:11:84:11 | e | local_dataflow.rb:84:6:84:12 | call to sink | position 0 |
| local_dataflow.rb:85:20:85:26 | self | local_dataflow.rb:85:20:85:26 | call to sink | self |
| local_dataflow.rb:85:25:85:25 | f | local_dataflow.rb:85:20:85:26 | call to sink | position 0 |
| local_dataflow.rb:86:26:86:32 | self | local_dataflow.rb:86:26:86:32 | call to sink | self |
| local_dataflow.rb:86:31:86:31 | g | local_dataflow.rb:86:26:86:32 | call to sink | position 0 |
| local_dataflow.rb:87:18:87:24 | self | local_dataflow.rb:87:18:87:24 | call to sink | self |
| local_dataflow.rb:87:23:87:23 | x | local_dataflow.rb:87:18:87:24 | call to sink | position 0 |
| local_dataflow.rb:89:1:89:7 | self | local_dataflow.rb:89:1:89:7 | call to sink | self |
| local_dataflow.rb:89:6:89:6 | z | local_dataflow.rb:89:1:89:7 | call to sink | position 0 |
| local_dataflow.rb:79:20:79:26 | self | local_dataflow.rb:79:20:79:26 | call to sink | self |
| local_dataflow.rb:79:25:79:25 | b | local_dataflow.rb:79:20:79:26 | call to sink | position 0 |
| local_dataflow.rb:80:13:80:13 | a | local_dataflow.rb:80:13:80:17 | ... > ... | self |
| local_dataflow.rb:80:17:80:17 | 0 | local_dataflow.rb:80:13:80:17 | ... > ... | position 0 |
| local_dataflow.rb:80:24:80:30 | self | local_dataflow.rb:80:24:80:30 | call to sink | self |
| local_dataflow.rb:80:29:80:29 | a | local_dataflow.rb:80:24:80:30 | call to sink | position 0 |
| local_dataflow.rb:81:25:84:14 | Array | local_dataflow.rb:81:25:84:14 | call to [] | self |
| local_dataflow.rb:82:7:82:13 | call to sink | local_dataflow.rb:81:25:84:14 | call to [] | position 0 |
| local_dataflow.rb:82:7:82:13 | self | local_dataflow.rb:82:7:82:13 | call to sink | self |
| local_dataflow.rb:82:12:82:12 | c | local_dataflow.rb:82:7:82:13 | call to sink | position 0 |
| local_dataflow.rb:83:7:83:13 | call to sink | local_dataflow.rb:81:25:84:14 | call to [] | position 1 |
| local_dataflow.rb:83:7:83:13 | self | local_dataflow.rb:83:7:83:13 | call to sink | self |
| local_dataflow.rb:83:12:83:12 | d | local_dataflow.rb:83:7:83:13 | call to sink | position 0 |
| local_dataflow.rb:84:7:84:13 | call to sink | local_dataflow.rb:81:25:84:14 | call to [] | position 2 |
| local_dataflow.rb:84:7:84:13 | self | local_dataflow.rb:84:7:84:13 | call to sink | self |
| local_dataflow.rb:84:12:84:12 | e | local_dataflow.rb:84:7:84:13 | call to sink | position 0 |
| local_dataflow.rb:85:22:85:28 | self | local_dataflow.rb:85:22:85:28 | call to sink | self |
| local_dataflow.rb:85:27:85:27 | f | local_dataflow.rb:85:22:85:28 | call to sink | position 0 |
| local_dataflow.rb:86:28:86:34 | self | local_dataflow.rb:86:28:86:34 | call to sink | self |
| local_dataflow.rb:86:33:86:33 | g | local_dataflow.rb:86:28:86:34 | call to sink | position 0 |
| local_dataflow.rb:87:20:87:26 | self | local_dataflow.rb:87:20:87:26 | call to sink | self |
| local_dataflow.rb:87:25:87:25 | x | local_dataflow.rb:87:20:87:26 | call to sink | position 0 |
| local_dataflow.rb:89:3:89:9 | self | local_dataflow.rb:89:3:89:9 | call to sink | self |
| local_dataflow.rb:89:8:89:8 | z | local_dataflow.rb:89:3:89:9 | call to sink | position 0 |

View File

@@ -1,33 +1,33 @@
failures
edges
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:79:23:79:23 | b |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:80:27:80:27 | a |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:82:11:82:11 | c |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:83:11:83:11 | d |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:84:11:84:11 | e |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:85:25:85:25 | f |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:86:31:86:31 | g |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:87:23:87:23 | x |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:89:6:89:6 | z |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:79:25:79:25 | b |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:80:29:80:29 | a |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:82:12:82:12 | c |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:83:12:83:12 | d |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:84:12:84:12 | e |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:85:27:85:27 | f |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:86:33:86:33 | g |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:87:25:87:25 | x |
| local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:89:8:89:8 | z |
nodes
| local_dataflow.rb:78:12:78:20 | call to source : | semmle.label | call to source : |
| local_dataflow.rb:79:23:79:23 | b | semmle.label | b |
| local_dataflow.rb:80:27:80:27 | a | semmle.label | a |
| local_dataflow.rb:82:11:82:11 | c | semmle.label | c |
| local_dataflow.rb:83:11:83:11 | d | semmle.label | d |
| local_dataflow.rb:84:11:84:11 | e | semmle.label | e |
| local_dataflow.rb:85:25:85:25 | f | semmle.label | f |
| local_dataflow.rb:86:31:86:31 | g | semmle.label | g |
| local_dataflow.rb:87:23:87:23 | x | semmle.label | x |
| local_dataflow.rb:89:6:89:6 | z | semmle.label | z |
| local_dataflow.rb:79:25:79:25 | b | semmle.label | b |
| local_dataflow.rb:80:29:80:29 | a | semmle.label | a |
| local_dataflow.rb:82:12:82:12 | c | semmle.label | c |
| local_dataflow.rb:83:12:83:12 | d | semmle.label | d |
| local_dataflow.rb:84:12:84:12 | e | semmle.label | e |
| local_dataflow.rb:85:27:85:27 | f | semmle.label | f |
| local_dataflow.rb:86:33:86:33 | g | semmle.label | g |
| local_dataflow.rb:87:25:87:25 | x | semmle.label | x |
| local_dataflow.rb:89:8:89:8 | z | semmle.label | z |
subpaths
#select
| local_dataflow.rb:79:23:79:23 | b | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:79:23:79:23 | b | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:80:27:80:27 | a | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:80:27:80:27 | a | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:82:11:82:11 | c | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:82:11:82:11 | c | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:83:11:83:11 | d | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:83:11:83:11 | d | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:84:11:84:11 | e | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:84:11:84:11 | e | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:85:25:85:25 | f | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:85:25:85:25 | f | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:86:31:86:31 | g | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:86:31:86:31 | g | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:87:23:87:23 | x | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:87:23:87:23 | x | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:89:6:89:6 | z | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:89:6:89:6 | z | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:79:25:79:25 | b | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:79:25:79:25 | b | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:80:29:80:29 | a | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:80:29:80:29 | a | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:82:12:82:12 | c | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:82:12:82:12 | c | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:83:12:83:12 | d | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:83:12:83:12 | d | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:84:12:84:12 | e | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:84:12:84:12 | e | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:85:27:85:27 | f | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:85:27:85:27 | f | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:86:33:86:33 | g | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:86:33:86:33 | g | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:87:25:87:25 | x | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:87:25:87:25 | x | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |
| local_dataflow.rb:89:8:89:8 | z | local_dataflow.rb:78:12:78:20 | call to source : | local_dataflow.rb:89:8:89:8 | z | $@ | local_dataflow.rb:78:12:78:20 | call to source : | call to source : |

View File

@@ -76,16 +76,16 @@ def test_case x
end
z = case source(1)
in 5 => b then sink(b) # $ hasTaintFlow=1
in a if a > 0 then sink(a) # $ hasTaintFlow=1
in [c, *d, e ] then [
sink(c), # $ hasTaintFlow=1
sink(d), # $ hasTaintFlow=1
sink(e)] # $ hasTaintFlow=1
in { a: f } then sink(f) # $ hasTaintFlow=1
in { foo: 1, g: } then sink(g) # $ hasTaintFlow=1
in { x: } then sink(x); x # $ hasTaintFlow=1
end
sink(z) # $ hasTaintFlow=1
in 5 => b then sink(b) # $ hasTaintFlow=1
in a if a > 0 then sink(a) # $ hasTaintFlow=1
in [c, *d, e ] then [
sink(c), # $ hasTaintFlow=1
sink(d), # $ hasTaintFlow=1
sink(e)] # $ hasTaintFlow=1
in { a: f } then sink(f) # $ hasTaintFlow=1
in { foo: 1, g: } then sink(g) # $ hasTaintFlow=1
in { x: } then sink(x); x # $ hasTaintFlow=1
end
sink(z) # $ hasTaintFlow=1
end