mirror of
https://github.com/github/codeql.git
synced 2026-02-20 00:43:44 +01:00
Change modelling of Parameters
This commit is contained in:
@@ -13,35 +13,50 @@ private VariableScope enclosingScope(AstNode node) {
|
||||
result.getScopeElement() = parent*(node.getParent())
|
||||
}
|
||||
|
||||
private string parameterName(AstNode node) {
|
||||
result = node.(Identifier).getValue() or
|
||||
result = node.(SplatParameter).getName().getValue() or
|
||||
result = node.(HashSplatParameter).getName().getValue() or
|
||||
result = node.(BlockParameter).getName().getValue() or
|
||||
result = node.(OptionalParameter).getName().getValue() or
|
||||
result = node.(KeywordParameter).getName().getValue() or
|
||||
result = parameterName(node.(DestructuredParameter).getAFieldOrChild())
|
||||
/** A parameter. */
|
||||
class Parameter extends AstNode {
|
||||
int position;
|
||||
VariableScope scope;
|
||||
|
||||
Parameter() {
|
||||
this =
|
||||
scope.(BlockScope).getScopeElement().getAFieldOrChild().(BlockParameters).getChild(position)
|
||||
or
|
||||
this =
|
||||
scope.(MethodScope).getScopeElement().getAFieldOrChild().(MethodParameters).getChild(position)
|
||||
}
|
||||
|
||||
final int getPosition() { result = position }
|
||||
|
||||
final VariableScope getDeclaringScope() { result = scope }
|
||||
|
||||
final ParameterAccess getAnAccess() { result.getParameter() = this }
|
||||
}
|
||||
|
||||
/** Holds if `scope` defines `name` as a parameter. */
|
||||
private Identifier parameterIdentifier(Parameter p) {
|
||||
result = p or
|
||||
result = p.(SplatParameter).getName() or
|
||||
result = p.(HashSplatParameter).getName() or
|
||||
result = p.(BlockParameter).getName() or
|
||||
result = p.(OptionalParameter).getName() or
|
||||
result = p.(KeywordParameter).getName() or
|
||||
result = destructuredIdentifier(p.(DestructuredParameter))
|
||||
}
|
||||
|
||||
private Identifier destructuredIdentifier(AstNode node) {
|
||||
result = node or
|
||||
result = destructuredIdentifier(node.(DestructuredParameter).getAFieldOrChild())
|
||||
}
|
||||
|
||||
/** Holds if `scope` defines `name` in its parameter declaration. */
|
||||
private predicate scopeDefinesParameter(VariableScope scope, string name, Location location) {
|
||||
location =
|
||||
min(AstNode var |
|
||||
name = parameterName(var) and
|
||||
var in [scope
|
||||
.(BlockScope)
|
||||
.getScopeElement()
|
||||
.getAFieldOrChild()
|
||||
.(BlockParameters)
|
||||
.getAFieldOrChild(),
|
||||
scope
|
||||
.(MethodScope)
|
||||
.getScopeElement()
|
||||
.getAFieldOrChild()
|
||||
.(MethodParameters)
|
||||
.getAFieldOrChild()]
|
||||
min(Parameter p, Identifier i |
|
||||
scope = p.getDeclaringScope() and
|
||||
i = parameterIdentifier(p) and
|
||||
name = i.getValue()
|
||||
|
|
||||
var.getLocation() as loc order by loc.getStartLine(), loc.getStartColumn()
|
||||
i.getLocation() as loc order by loc.getStartLine(), loc.getStartColumn()
|
||||
)
|
||||
}
|
||||
|
||||
@@ -89,10 +104,9 @@ private module Cached {
|
||||
|
||||
cached
|
||||
newtype TVariable =
|
||||
TParameter(VariableScope scope, string name, Location location) {
|
||||
scopeDefinesParameter(scope, name, location)
|
||||
} or
|
||||
TLocalVariable(VariableScope scope, string name, Location location) {
|
||||
scopeDefinesParameter(scope, name, location)
|
||||
or
|
||||
not scopeDefinesParameter(scope, name, _) and
|
||||
not blockScopeInherits(scope, name, _) and
|
||||
location =
|
||||
@@ -158,23 +172,6 @@ class Variable extends TVariable {
|
||||
VariableAccess getAnAccess() { result.getVariable() = this }
|
||||
}
|
||||
|
||||
/** A parameter. */
|
||||
class Parameter extends Variable {
|
||||
private VariableScope scope;
|
||||
private string name;
|
||||
private Location location;
|
||||
|
||||
Parameter() { this = TParameter(scope, name, location) }
|
||||
|
||||
final override string getName() { result = name }
|
||||
|
||||
final override Location getLocation() { result = location }
|
||||
|
||||
final override VariableScope getDeclaringScope() { result = scope }
|
||||
|
||||
final override ParameterAccess getAnAccess() { result = super.getAnAccess() }
|
||||
}
|
||||
|
||||
/** A local variable. */
|
||||
class LocalVariable extends Variable {
|
||||
private VariableScope scope;
|
||||
@@ -188,8 +185,6 @@ class LocalVariable extends Variable {
|
||||
final override Location getLocation() { result = location }
|
||||
|
||||
final override VariableScope getDeclaringScope() { result = scope }
|
||||
|
||||
final override LocalVariableAccess getAnAccess() { result = super.getAnAccess() }
|
||||
}
|
||||
|
||||
/** An identifier that refers to a variable. */
|
||||
@@ -206,16 +201,17 @@ class VariableAccess extends Identifier {
|
||||
|
||||
/** An identifier that refers to a parameter. */
|
||||
class ParameterAccess extends VariableAccess {
|
||||
override Parameter variable;
|
||||
Parameter parameter;
|
||||
|
||||
final override Parameter getVariable() { result = variable }
|
||||
}
|
||||
ParameterAccess() {
|
||||
exists(Identifier i |
|
||||
i = parameterIdentifier(parameter) and
|
||||
variable.getDeclaringScope() = parameter.getDeclaringScope() and
|
||||
variable.getLocation() = i.getLocation()
|
||||
)
|
||||
}
|
||||
|
||||
/** An identifier that refers to a local variable. */
|
||||
class LocalVariableAccess extends VariableAccess {
|
||||
override LocalVariable variable;
|
||||
|
||||
final override LocalVariable getVariable() { result = super.getVariable() }
|
||||
final Parameter getParameter() { result = parameter }
|
||||
}
|
||||
|
||||
/** A top-level scope. */
|
||||
|
||||
29
ql/test/library-tests/variables/parameter.expected
Normal file
29
ql/test/library-tests/variables/parameter.expected
Normal file
@@ -0,0 +1,29 @@
|
||||
parameter
|
||||
| nested_scopes.rb:15:23:15:23 | a | nested_scopes.rb:15:23:15:23 | a |
|
||||
| nested_scopes.rb:16:26:16:26 | x | nested_scopes.rb:16:26:16:26 | x |
|
||||
| nested_scopes.rb:16:29:16:29 | a | nested_scopes.rb:16:29:16:29 | a |
|
||||
| nested_scopes.rb:18:26:18:26 | x | nested_scopes.rb:18:26:18:26 | x |
|
||||
| nested_scopes.rb:22:21:22:21 | a | nested_scopes.rb:22:21:22:21 | a |
|
||||
| parameters.rb:1:14:1:14 | x | parameters.rb:1:14:1:14 | x |
|
||||
| parameters.rb:1:18:1:18 | y | parameters.rb:1:18:1:18 | y |
|
||||
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client |
|
||||
| parameters.rb:7:25:7:31 | SplatParameter | parameters.rb:7:26:7:31 | pizzas |
|
||||
| parameters.rb:15:15:15:19 | HashSplatParameter | parameters.rb:15:17:15:19 | map |
|
||||
| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key |
|
||||
| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value |
|
||||
| parameters.rb:21:16:21:21 | BlockParameter | parameters.rb:21:17:21:21 | block |
|
||||
| parameters.rb:25:15:25:30 | OptionalParameter | parameters.rb:25:15:25:18 | name |
|
||||
| parameters.rb:25:33:25:50 | OptionalParameter | parameters.rb:25:33:25:36 | size |
|
||||
| parameters.rb:30:15:30:20 | KeywordParameter | parameters.rb:30:15:30:19 | first |
|
||||
| parameters.rb:30:24:30:33 | KeywordParameter | parameters.rb:30:24:30:29 | middle |
|
||||
| parameters.rb:30:36:30:40 | KeywordParameter | parameters.rb:30:36:30:39 | last |
|
||||
| parameters.rb:35:11:35:21 | OptionalParameter | parameters.rb:35:11:35:11 | a |
|
||||
| parameters.rb:40:12:40:19 | KeywordParameter | parameters.rb:40:12:40:12 | d |
|
||||
| parameters.rb:45:20:45:20 | _ | parameters.rb:45:20:45:20 | _ |
|
||||
| parameters.rb:49:12:49:16 | DestructuredParameter | parameters.rb:49:13:49:13 | a |
|
||||
| parameters.rb:49:12:49:16 | DestructuredParameter | parameters.rb:49:15:49:15 | b |
|
||||
| parameters.rb:54:14:54:24 | OptionalParameter | parameters.rb:54:14:54:14 | y |
|
||||
| scopes.rb:2:14:2:14 | x | scopes.rb:2:14:2:14 | x |
|
||||
| scopes.rb:9:14:9:14 | x | scopes.rb:9:14:9:14 | x |
|
||||
parameterNoAcess
|
||||
| parameters.rb:45:22:45:22 | _ |
|
||||
5
ql/test/library-tests/variables/parameter.ql
Normal file
5
ql/test/library-tests/variables/parameter.ql
Normal file
@@ -0,0 +1,5 @@
|
||||
import codeql_ruby.Variables
|
||||
|
||||
query predicate parameter(Parameter p, Variable v) { p.getAnAccess().getVariable() = v }
|
||||
|
||||
query predicate parameterNoAcess(Parameter p) { not exists(p.getAnAccess()) }
|
||||
@@ -30,51 +30,51 @@ variableAccess
|
||||
| parameters.rb:3:9:3:9 | x | parameters.rb:1:14:1:14 | x | parameters.rb:1:9:5:3 | block scope |
|
||||
| parameters.rb:4:9:4:9 | y | parameters.rb:1:18:1:18 | y | parameters.rb:1:9:5:3 | block scope |
|
||||
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:8:6:8:11 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:8:6:8:11 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:9:25:9:30 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:11:14:11:19 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:11:14:11:19 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:11:41:11:46 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:15:17:15:19 | map | parameters.rb:15:15:15:19 | map | parameters.rb:15:1:19:3 | method scope |
|
||||
| parameters.rb:16:3:16:5 | map | parameters.rb:15:15:15:19 | map | parameters.rb:15:1:19:3 | method scope |
|
||||
| parameters.rb:15:17:15:19 | map | parameters.rb:15:17:15:19 | map | parameters.rb:15:1:19:3 | method scope |
|
||||
| parameters.rb:16:3:16:5 | map | parameters.rb:15:17:15:19 | map | parameters.rb:15:1:19:3 | method scope |
|
||||
| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key | parameters.rb:16:12:18:5 | block scope |
|
||||
| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value | parameters.rb:16:12:18:5 | block scope |
|
||||
| parameters.rb:17:13:17:15 | key | parameters.rb:16:16:16:18 | key | parameters.rb:16:12:18:5 | block scope |
|
||||
| parameters.rb:17:22:17:26 | value | parameters.rb:16:21:16:25 | value | parameters.rb:16:12:18:5 | block scope |
|
||||
| parameters.rb:21:17:21:21 | block | parameters.rb:21:16:21:21 | block | parameters.rb:21:1:23:3 | method scope |
|
||||
| parameters.rb:22:3:22:7 | block | parameters.rb:21:16:21:21 | block | parameters.rb:21:1:23:3 | method scope |
|
||||
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:50 | size | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:25:40:25:43 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:26:8:26:11 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:27:8:27:11 | size | parameters.rb:25:33:25:50 | size | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:20 | first | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:33 | middle | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:40 | last | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:11:31:15 | first | parameters.rb:30:15:30:20 | first | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:20:31:25 | middle | parameters.rb:30:24:30:33 | middle | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:30:31:33 | last | parameters.rb:30:36:30:40 | last | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:21:17:21:21 | block | parameters.rb:21:17:21:21 | block | parameters.rb:21:1:23:3 | method scope |
|
||||
| parameters.rb:22:3:22:7 | block | parameters.rb:21:17:21:21 | block | parameters.rb:21:1:23:3 | method scope |
|
||||
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:36 | size | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:25:40:25:43 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:26:8:26:11 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:27:8:27:11 | size | parameters.rb:25:33:25:36 | size | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:19 | first | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:29 | middle | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:39 | last | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:11:31:15 | first | parameters.rb:30:15:30:19 | first | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:20:31:25 | middle | parameters.rb:30:24:30:29 | middle | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:30:31:33 | last | parameters.rb:30:36:30:39 | last | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:34:1:34:1 | b | parameters.rb:34:1:34:1 | b | parameters.rb:1:1:58:1 | top-level scope |
|
||||
| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:21 | a | parameters.rb:35:1:38:3 | method scope |
|
||||
| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:11 | a | parameters.rb:35:1:38:3 | method scope |
|
||||
| parameters.rb:35:16:35:16 | b | parameters.rb:35:16:35:16 | b | parameters.rb:35:1:38:3 | method scope |
|
||||
| parameters.rb:37:11:37:11 | a | parameters.rb:35:11:35:21 | a | parameters.rb:35:1:38:3 | method scope |
|
||||
| parameters.rb:37:11:37:11 | a | parameters.rb:35:11:35:11 | a | parameters.rb:35:1:38:3 | method scope |
|
||||
| parameters.rb:37:16:37:16 | b | parameters.rb:35:16:35:16 | b | parameters.rb:35:1:38:3 | method scope |
|
||||
| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:19 | d | parameters.rb:40:1:43:3 | method scope |
|
||||
| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:12 | d | parameters.rb:40:1:43:3 | method scope |
|
||||
| parameters.rb:40:15:40:15 | e | parameters.rb:40:15:40:15 | e | parameters.rb:40:1:43:3 | method scope |
|
||||
| parameters.rb:42:11:42:11 | d | parameters.rb:40:12:40:19 | d | parameters.rb:40:1:43:3 | method scope |
|
||||
| parameters.rb:42:11:42:11 | d | parameters.rb:40:12:40:12 | d | parameters.rb:40:1:43:3 | method scope |
|
||||
| parameters.rb:42:16:42:16 | e | parameters.rb:40:15:40:15 | e | parameters.rb:40:1:43:3 | method scope |
|
||||
| parameters.rb:45:20:45:20 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope |
|
||||
| parameters.rb:45:22:45:22 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope |
|
||||
| parameters.rb:46:8:46:8 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope |
|
||||
| parameters.rb:49:13:49:13 | a | parameters.rb:49:12:49:16 | a | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:49:15:49:15 | b | parameters.rb:49:12:49:16 | b | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:50:11:50:11 | a | parameters.rb:49:12:49:16 | a | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:50:16:50:16 | b | parameters.rb:49:12:49:16 | b | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:49:13:49:13 | a | parameters.rb:49:13:49:13 | a | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:49:15:49:15 | b | parameters.rb:49:15:49:15 | b | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:50:11:50:11 | a | parameters.rb:49:13:49:13 | a | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:50:16:50:16 | b | parameters.rb:49:15:49:15 | b | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:53:1:53:1 | x | parameters.rb:53:1:53:1 | x | parameters.rb:1:1:58:1 | top-level scope |
|
||||
| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:24 | y | parameters.rb:54:9:57:3 | block scope |
|
||||
| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:14 | y | parameters.rb:54:9:57:3 | block scope |
|
||||
| parameters.rb:54:19:54:19 | x | parameters.rb:53:1:53:1 | x | parameters.rb:1:1:58:1 | top-level scope |
|
||||
| parameters.rb:55:9:55:9 | x | parameters.rb:53:1:53:1 | x | parameters.rb:1:1:58:1 | top-level scope |
|
||||
| parameters.rb:56:9:56:9 | y | parameters.rb:54:14:54:24 | y | parameters.rb:54:9:57:3 | block scope |
|
||||
| parameters.rb:56:9:56:9 | y | parameters.rb:54:14:54:14 | y | parameters.rb:54:9:57:3 | block scope |
|
||||
| scopes.rb:2:14:2:14 | x | scopes.rb:2:14:2:14 | x | scopes.rb:2:9:6:3 | block scope |
|
||||
| scopes.rb:4:4:4:4 | a | scopes.rb:4:4:4:4 | a | scopes.rb:2:9:6:3 | block scope |
|
||||
| scopes.rb:5:9:5:9 | a | scopes.rb:4:4:4:4 | a | scopes.rb:2:9:6:3 | block scope |
|
||||
@@ -101,43 +101,43 @@ parameterAccess
|
||||
| parameters.rb:3:9:3:9 | x | parameters.rb:1:14:1:14 | x | parameters.rb:1:9:5:3 | block scope |
|
||||
| parameters.rb:4:9:4:9 | y | parameters.rb:1:18:1:18 | y | parameters.rb:1:9:5:3 | block scope |
|
||||
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:8:6:8:11 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:8:6:8:11 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:9:25:9:30 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:11:14:11:19 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:11:14:11:19 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:11:41:11:46 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope |
|
||||
| parameters.rb:15:17:15:19 | map | parameters.rb:15:15:15:19 | map | parameters.rb:15:1:19:3 | method scope |
|
||||
| parameters.rb:16:3:16:5 | map | parameters.rb:15:15:15:19 | map | parameters.rb:15:1:19:3 | method scope |
|
||||
| parameters.rb:15:17:15:19 | map | parameters.rb:15:17:15:19 | map | parameters.rb:15:1:19:3 | method scope |
|
||||
| parameters.rb:16:3:16:5 | map | parameters.rb:15:17:15:19 | map | parameters.rb:15:1:19:3 | method scope |
|
||||
| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key | parameters.rb:16:12:18:5 | block scope |
|
||||
| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value | parameters.rb:16:12:18:5 | block scope |
|
||||
| parameters.rb:17:13:17:15 | key | parameters.rb:16:16:16:18 | key | parameters.rb:16:12:18:5 | block scope |
|
||||
| parameters.rb:17:22:17:26 | value | parameters.rb:16:21:16:25 | value | parameters.rb:16:12:18:5 | block scope |
|
||||
| parameters.rb:21:17:21:21 | block | parameters.rb:21:16:21:21 | block | parameters.rb:21:1:23:3 | method scope |
|
||||
| parameters.rb:22:3:22:7 | block | parameters.rb:21:16:21:21 | block | parameters.rb:21:1:23:3 | method scope |
|
||||
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:50 | size | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:25:40:25:43 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:26:8:26:11 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:27:8:27:11 | size | parameters.rb:25:33:25:50 | size | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:20 | first | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:33 | middle | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:40 | last | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:11:31:15 | first | parameters.rb:30:15:30:20 | first | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:20:31:25 | middle | parameters.rb:30:24:30:33 | middle | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:30:31:33 | last | parameters.rb:30:36:30:40 | last | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:21 | a | parameters.rb:35:1:38:3 | method scope |
|
||||
| parameters.rb:37:11:37:11 | a | parameters.rb:35:11:35:21 | a | parameters.rb:35:1:38:3 | method scope |
|
||||
| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:19 | d | parameters.rb:40:1:43:3 | method scope |
|
||||
| parameters.rb:42:11:42:11 | d | parameters.rb:40:12:40:19 | d | parameters.rb:40:1:43:3 | method scope |
|
||||
| parameters.rb:21:17:21:21 | block | parameters.rb:21:17:21:21 | block | parameters.rb:21:1:23:3 | method scope |
|
||||
| parameters.rb:22:3:22:7 | block | parameters.rb:21:17:21:21 | block | parameters.rb:21:1:23:3 | method scope |
|
||||
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:36 | size | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:25:40:25:43 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:26:8:26:11 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:27:8:27:11 | size | parameters.rb:25:33:25:36 | size | parameters.rb:25:1:28:3 | method scope |
|
||||
| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:19 | first | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:29 | middle | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:39 | last | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:11:31:15 | first | parameters.rb:30:15:30:19 | first | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:20:31:25 | middle | parameters.rb:30:24:30:29 | middle | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:31:30:31:33 | last | parameters.rb:30:36:30:39 | last | parameters.rb:30:1:32:3 | method scope |
|
||||
| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:11 | a | parameters.rb:35:1:38:3 | method scope |
|
||||
| parameters.rb:37:11:37:11 | a | parameters.rb:35:11:35:11 | a | parameters.rb:35:1:38:3 | method scope |
|
||||
| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:12 | d | parameters.rb:40:1:43:3 | method scope |
|
||||
| parameters.rb:42:11:42:11 | d | parameters.rb:40:12:40:12 | d | parameters.rb:40:1:43:3 | method scope |
|
||||
| parameters.rb:45:20:45:20 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope |
|
||||
| parameters.rb:45:22:45:22 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope |
|
||||
| parameters.rb:46:8:46:8 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope |
|
||||
| parameters.rb:49:13:49:13 | a | parameters.rb:49:12:49:16 | a | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:49:15:49:15 | b | parameters.rb:49:12:49:16 | b | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:50:11:50:11 | a | parameters.rb:49:12:49:16 | a | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:50:16:50:16 | b | parameters.rb:49:12:49:16 | b | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:24 | y | parameters.rb:54:9:57:3 | block scope |
|
||||
| parameters.rb:56:9:56:9 | y | parameters.rb:54:14:54:24 | y | parameters.rb:54:9:57:3 | block scope |
|
||||
| parameters.rb:49:13:49:13 | a | parameters.rb:49:13:49:13 | a | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:49:15:49:15 | b | parameters.rb:49:15:49:15 | b | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:50:11:50:11 | a | parameters.rb:49:13:49:13 | a | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:50:16:50:16 | b | parameters.rb:49:15:49:15 | b | parameters.rb:49:1:51:3 | method scope |
|
||||
| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:14 | y | parameters.rb:54:9:57:3 | block scope |
|
||||
| parameters.rb:56:9:56:9 | y | parameters.rb:54:14:54:14 | y | parameters.rb:54:9:57:3 | block scope |
|
||||
| scopes.rb:2:14:2:14 | x | scopes.rb:2:14:2:14 | x | scopes.rb:2:9:6:3 | block scope |
|
||||
| scopes.rb:9:14:9:14 | x | scopes.rb:9:14:9:14 | x | scopes.rb:9:9:13:3 | block scope |
|
||||
localVariableAccess
|
||||
|
||||
@@ -5,14 +5,15 @@ query predicate variableAccess(VariableAccess access, Variable variable, Variabl
|
||||
scope = variable.getDeclaringScope()
|
||||
}
|
||||
|
||||
query predicate parameterAccess(ParameterAccess access, Parameter variable, VariableScope scope) {
|
||||
query predicate parameterAccess(ParameterAccess access, LocalVariable variable, VariableScope scope) {
|
||||
variable = access.getVariable() and
|
||||
scope = variable.getDeclaringScope()
|
||||
}
|
||||
|
||||
query predicate localVariableAccess(
|
||||
LocalVariableAccess access, LocalVariable variable, VariableScope scope
|
||||
VariableAccess access, LocalVariable variable, VariableScope scope
|
||||
) {
|
||||
not access instanceof ParameterAccess and
|
||||
variable = access.getVariable() and
|
||||
scope = variable.getDeclaringScope()
|
||||
}
|
||||
|
||||
@@ -14,26 +14,26 @@ variable
|
||||
| parameters.rb:1:14:1:14 | x |
|
||||
| parameters.rb:1:18:1:18 | y |
|
||||
| parameters.rb:7:17:7:22 | client |
|
||||
| parameters.rb:7:25:7:31 | pizzas |
|
||||
| parameters.rb:15:15:15:19 | map |
|
||||
| parameters.rb:7:26:7:31 | pizzas |
|
||||
| parameters.rb:15:17:15:19 | map |
|
||||
| parameters.rb:16:16:16:18 | key |
|
||||
| parameters.rb:16:21:16:25 | value |
|
||||
| parameters.rb:21:16:21:21 | block |
|
||||
| parameters.rb:25:15:25:30 | name |
|
||||
| parameters.rb:25:33:25:50 | size |
|
||||
| parameters.rb:30:15:30:20 | first |
|
||||
| parameters.rb:30:24:30:33 | middle |
|
||||
| parameters.rb:30:36:30:40 | last |
|
||||
| parameters.rb:21:17:21:21 | block |
|
||||
| parameters.rb:25:15:25:18 | name |
|
||||
| parameters.rb:25:33:25:36 | size |
|
||||
| parameters.rb:30:15:30:19 | first |
|
||||
| parameters.rb:30:24:30:29 | middle |
|
||||
| parameters.rb:30:36:30:39 | last |
|
||||
| parameters.rb:34:1:34:1 | b |
|
||||
| parameters.rb:35:11:35:21 | a |
|
||||
| parameters.rb:35:11:35:11 | a |
|
||||
| parameters.rb:35:16:35:16 | b |
|
||||
| parameters.rb:40:12:40:19 | d |
|
||||
| parameters.rb:40:12:40:12 | d |
|
||||
| parameters.rb:40:15:40:15 | e |
|
||||
| parameters.rb:45:20:45:20 | _ |
|
||||
| parameters.rb:49:12:49:16 | a |
|
||||
| parameters.rb:49:12:49:16 | b |
|
||||
| parameters.rb:49:13:49:13 | a |
|
||||
| parameters.rb:49:15:49:15 | b |
|
||||
| parameters.rb:53:1:53:1 | x |
|
||||
| parameters.rb:54:14:54:24 | y |
|
||||
| parameters.rb:54:14:54:14 | y |
|
||||
| scopes.rb:2:14:2:14 | x |
|
||||
| scopes.rb:4:4:4:4 | a |
|
||||
| scopes.rb:7:1:7:1 | a |
|
||||
@@ -47,22 +47,22 @@ parameter
|
||||
| parameters.rb:1:14:1:14 | x |
|
||||
| parameters.rb:1:18:1:18 | y |
|
||||
| parameters.rb:7:17:7:22 | client |
|
||||
| parameters.rb:7:25:7:31 | pizzas |
|
||||
| parameters.rb:15:15:15:19 | map |
|
||||
| parameters.rb:7:26:7:31 | pizzas |
|
||||
| parameters.rb:15:17:15:19 | map |
|
||||
| parameters.rb:16:16:16:18 | key |
|
||||
| parameters.rb:16:21:16:25 | value |
|
||||
| parameters.rb:21:16:21:21 | block |
|
||||
| parameters.rb:25:15:25:30 | name |
|
||||
| parameters.rb:25:33:25:50 | size |
|
||||
| parameters.rb:30:15:30:20 | first |
|
||||
| parameters.rb:30:24:30:33 | middle |
|
||||
| parameters.rb:30:36:30:40 | last |
|
||||
| parameters.rb:35:11:35:21 | a |
|
||||
| parameters.rb:40:12:40:19 | d |
|
||||
| parameters.rb:21:17:21:21 | block |
|
||||
| parameters.rb:25:15:25:18 | name |
|
||||
| parameters.rb:25:33:25:36 | size |
|
||||
| parameters.rb:30:15:30:19 | first |
|
||||
| parameters.rb:30:24:30:29 | middle |
|
||||
| parameters.rb:30:36:30:39 | last |
|
||||
| parameters.rb:35:11:35:11 | a |
|
||||
| parameters.rb:40:12:40:12 | d |
|
||||
| parameters.rb:45:20:45:20 | _ |
|
||||
| parameters.rb:49:12:49:16 | a |
|
||||
| parameters.rb:49:12:49:16 | b |
|
||||
| parameters.rb:54:14:54:24 | y |
|
||||
| parameters.rb:49:13:49:13 | a |
|
||||
| parameters.rb:49:15:49:15 | b |
|
||||
| parameters.rb:54:14:54:14 | y |
|
||||
| scopes.rb:2:14:2:14 | x |
|
||||
| scopes.rb:9:14:9:14 | x |
|
||||
localVariable
|
||||
|
||||
@@ -2,6 +2,6 @@ import codeql_ruby.Variables
|
||||
|
||||
query predicate variable(Variable v) { any() }
|
||||
|
||||
query predicate parameter(Parameter p) { any() }
|
||||
query predicate parameter(LocalVariable v) { v.getAnAccess() instanceof ParameterAccess }
|
||||
|
||||
query predicate localVariable(LocalVariable v) { any() }
|
||||
query predicate localVariable(LocalVariable v) { not v.getAnAccess() instanceof ParameterAccess }
|
||||
|
||||
Reference in New Issue
Block a user