mirror of
https://github.com/github/codeql.git
synced 2026-04-27 17:55:19 +02:00
Ruby: use InstanceVariableRead/WriteAccess CFG nodes
This commit is contained in:
@@ -623,7 +623,7 @@ module ExprNodes {
|
||||
class InstanceVariableAccessCfgNode extends ExprCfgNode {
|
||||
override InstanceVariableAccessMapping e;
|
||||
|
||||
final override InstanceVariableAccess getExpr() { result = ExprCfgNode.super.getExpr() }
|
||||
override InstanceVariableAccess getExpr() { result = ExprCfgNode.super.getExpr() }
|
||||
|
||||
/**
|
||||
* Gets the synthetic receiver(`self`) of this instance variable access.
|
||||
@@ -652,11 +652,22 @@ module ExprNodes {
|
||||
final override ConstantWriteAccess getExpr() { result = ExprCfgNode.super.getExpr() }
|
||||
}
|
||||
|
||||
/** A control-flow node that wraps an `InstanceVariableWriteAccess` AST expression. */
|
||||
class InstanceVariableWriteAccessCfgNode extends ExprCfgNode {
|
||||
override InstanceVariableWriteAccess e;
|
||||
/** A control-flow node that wraps an `InstanceVariableReadAccess` AST expression. */
|
||||
class InstanceVariableReadAccessCfgNode extends InstanceVariableAccessCfgNode {
|
||||
InstanceVariableReadAccessCfgNode() { this.getNode() instanceof InstanceVariableReadAccess }
|
||||
|
||||
final override InstanceVariableWriteAccess getExpr() { result = ExprCfgNode.super.getExpr() }
|
||||
final override InstanceVariableReadAccess getExpr() {
|
||||
result = InstanceVariableAccessCfgNode.super.getExpr()
|
||||
}
|
||||
}
|
||||
|
||||
/** A control-flow node that wraps an `InstanceVariableWriteAccess` AST expression. */
|
||||
class InstanceVariableWriteAccessCfgNode extends InstanceVariableAccessCfgNode {
|
||||
InstanceVariableWriteAccessCfgNode() { this.getNode() instanceof InstanceVariableWriteAccess }
|
||||
|
||||
final override InstanceVariableWriteAccess getExpr() {
|
||||
result = InstanceVariableAccessCfgNode.super.getExpr()
|
||||
}
|
||||
}
|
||||
|
||||
/** A control-flow node that wraps a `StringInterpolationComponent` AST expression. */
|
||||
|
||||
@@ -794,8 +794,7 @@ predicate jumpStep(Node pred, Node succ) {
|
||||
predicate storeStep(Node node1, ContentSet c, Node node2) {
|
||||
// Instance variable assignment, `@var = src`
|
||||
node2.(PostUpdateNode).getPreUpdateNode().asExpr() =
|
||||
any(CfgNodes::ExprNodes::InstanceVariableAccessCfgNode var |
|
||||
var.getExpr() instanceof InstanceVariableWriteAccess and
|
||||
any(CfgNodes::ExprNodes::InstanceVariableWriteAccessCfgNode var |
|
||||
exists(CfgNodes::ExprNodes::AssignExprCfgNode assign |
|
||||
var = assign.getLhs() and
|
||||
node1.asExpr() = assign.getRhs()
|
||||
@@ -815,8 +814,7 @@ predicate storeStep(Node node1, ContentSet c, Node node2) {
|
||||
predicate readStep(Node node1, ContentSet c, Node node2) {
|
||||
// Instance variable read access, `@var`
|
||||
node2.asExpr() =
|
||||
any(CfgNodes::ExprNodes::InstanceVariableAccessCfgNode var |
|
||||
var.getExpr() instanceof InstanceVariableReadAccess and
|
||||
any(CfgNodes::ExprNodes::InstanceVariableReadAccessCfgNode var |
|
||||
node1.asExpr() = var.getReceiver() and
|
||||
c.isSingleton(any(Content::FieldContent ct |
|
||||
ct.getName() = var.getExpr().getVariable().getName()
|
||||
|
||||
Reference in New Issue
Block a user