Skip to content

Commit e24f041

Browse files
committed
drive-by: use instanceof KernelMethodCall such that override getAnArgument cannot be mistaken for a method in CallNode
1 parent 5849b2c commit e24f041

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,14 @@ module Kernel {
9292
* ```
9393
* Ruby documentation: https://docs.ruby-lang.org/en/3.0.0/Kernel.html#method-i-system
9494
*/
95-
class KernelSystemCall extends SystemCommandExecution::Range, KernelMethodCall {
95+
class KernelSystemCall extends SystemCommandExecution::Range instanceof KernelMethodCall {
9696
KernelSystemCall() { this.getMethodName() = "system" }
9797

98-
override DataFlow::Node getAnArgument() { result = this.getArgument(_) }
98+
override DataFlow::Node getAnArgument() { result = super.getArgument(_) }
9999

100100
override predicate isShellInterpreted(DataFlow::Node arg) {
101101
// Kernel.system invokes a subshell if you provide a single string as argument
102-
this.getNumberOfArguments() = 1 and arg = this.getAnArgument()
102+
super.getNumberOfArguments() = 1 and arg = this.getAnArgument()
103103
}
104104
}
105105

@@ -108,14 +108,14 @@ module Kernel {
108108
* `Kernel.exec` takes the same argument forms as `Kernel.system`. See `KernelSystemCall` for details.
109109
* Ruby documentation: https://docs.ruby-lang.org/en/3.0.0/Kernel.html#method-i-exec
110110
*/
111-
class KernelExecCall extends SystemCommandExecution::Range, KernelMethodCall {
111+
class KernelExecCall extends SystemCommandExecution::Range instanceof KernelMethodCall {
112112
KernelExecCall() { this.getMethodName() = "exec" }
113113

114-
override DataFlow::Node getAnArgument() { result = this.getArgument(_) }
114+
override DataFlow::Node getAnArgument() { result = super.getArgument(_) }
115115

116116
override predicate isShellInterpreted(DataFlow::Node arg) {
117117
// Kernel.exec invokes a subshell if you provide a single string as argument
118-
this.getNumberOfArguments() = 1 and arg = this.getAnArgument()
118+
super.getNumberOfArguments() = 1 and arg = this.getAnArgument()
119119
}
120120
}
121121

@@ -129,14 +129,14 @@ module Kernel {
129129
* spawn([env,] command... [,options]) -> pid
130130
* ```
131131
*/
132-
class KernelSpawnCall extends SystemCommandExecution::Range, KernelMethodCall {
132+
class KernelSpawnCall extends SystemCommandExecution::Range instanceof KernelMethodCall {
133133
KernelSpawnCall() { this.getMethodName() = "spawn" }
134134

135-
override DataFlow::Node getAnArgument() { result = this.getArgument(_) }
135+
override DataFlow::Node getAnArgument() { result = super.getArgument(_) }
136136

137137
override predicate isShellInterpreted(DataFlow::Node arg) {
138138
// Kernel.spawn invokes a subshell if you provide a single string as argument
139-
this.getNumberOfArguments() = 1 and arg = this.getAnArgument()
139+
super.getNumberOfArguments() = 1 and arg = this.getAnArgument()
140140
}
141141
}
142142

0 commit comments

Comments
 (0)