Merge pull request #19206 from hvitved/ruby/super-implicit-args-synth

Ruby: Synthesize implicit super arguments
This commit is contained in:
yoff
2025-04-07 11:57:12 +02:00
committed by GitHub
21 changed files with 1598 additions and 308 deletions

View File

@@ -3153,6 +3153,54 @@ params/params.rb:
# 95| getReceiver: [LocalVariableAccess] hash
# 95| getArgument: [HashSplatExpr] ** ...
# 95| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0
# 98| getStmt: [ClassDeclaration] Sup
# 99| getStmt: [Method] m
# 99| getParameter: [SimpleParameter] x
# 99| getDefiningAccess: [LocalVariableAccess] x
# 99| getParameter: [SplatParameter] *rest
# 99| getDefiningAccess: [LocalVariableAccess] rest
# 99| getParameter: [KeywordParameter] k
# 99| getDefiningAccess: [LocalVariableAccess] k
# 99| getParameter: [HashSplatParameter] **kwargs
# 99| getDefiningAccess: [LocalVariableAccess] kwargs
# 100| getStmt: [MethodCall] call to print
# 100| getReceiver: [SelfVariableAccess] self
# 100| getArgument: [AddExpr] ... + ...
# 100| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
# 100| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
# 101| getStmt: [MethodCall] call to print
# 101| getReceiver: [SelfVariableAccess] self
# 101| getArgument: [AddExpr] ... + ...
# 101| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] k
# 101| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
# 105| getStmt: [ClassDeclaration] Sub
# 105| getSuperclassExpr: [ConstantReadAccess] Sup
# 106| getStmt: [Method] m
# 106| getParameter: [SimpleParameter] y
# 106| getDefiningAccess: [LocalVariableAccess] y
# 106| getParameter: [SplatParameter] *rest
# 106| getDefiningAccess: [LocalVariableAccess] rest
# 106| getParameter: [KeywordParameter] k
# 106| getDefiningAccess: [LocalVariableAccess] k
# 106| getParameter: [HashSplatParameter] **kwargs
# 106| getDefiningAccess: [LocalVariableAccess] kwargs
# 107| getStmt: [SuperCall] super call to m
# 107| getArgument: [HashSplatExpr] ** ...
# 107| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] kwargs
# 107| getArgument: [Pair] Pair
# 107| getKey: [SymbolLiteral] k
# 107| getValue: [LocalVariableAccess] k
# 107| getArgument: [SplatExpr] * ...
# 107| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] rest
# 107| getArgument: [LocalVariableAccess] y
# 111| getStmt: [MethodCall] call to m
# 111| getReceiver: [MethodCall] call to new
# 111| getReceiver: [ConstantReadAccess] Sub
# 111| getArgument: [IntegerLiteral] 42
# 111| getArgument: [Pair] Pair
# 111| getKey: [SymbolLiteral] :k
# 111| getComponent: [StringTextComponent] k
# 111| getValue: [IntegerLiteral] 22
erb/template.html.erb:
# 19| [Toplevel] template.html.erb
# 19| getStmt: [StringLiteral] "hello world"

View File

@@ -6192,6 +6192,96 @@ params/params.rb:
# 95| 0: [ReservedWord] **
# 95| 2: [ReservedWord] )
# 96| 4: [ReservedWord] end
# 98| 25: [Class] Class
# 98| 0: [ReservedWord] class
# 98| 1: [Constant] Sup
# 99| 2: [BodyStatement] BodyStatement
# 99| 0: [Method] Method
# 99| 0: [ReservedWord] def
# 99| 1: [Identifier] m
# 99| 2: [MethodParameters] MethodParameters
# 99| 0: [ReservedWord] (
# 99| 1: [Identifier] x
# 99| 2: [ReservedWord] ,
# 99| 3: [SplatParameter] SplatParameter
# 99| 0: [ReservedWord] *
# 99| 1: [Identifier] rest
# 99| 4: [ReservedWord] ,
# 99| 5: [KeywordParameter] KeywordParameter
# 99| 0: [Identifier] k
# 99| 1: [ReservedWord] :
# 99| 6: [ReservedWord] ,
# 99| 7: [HashSplatParameter] HashSplatParameter
# 99| 0: [ReservedWord] **
# 99| 1: [Identifier] kwargs
# 99| 8: [ReservedWord] )
# 100| 3: [BodyStatement] BodyStatement
# 100| 0: [Call] Call
# 100| 0: [Identifier] print
# 100| 1: [ArgumentList] ArgumentList
# 100| 0: [ReservedWord] (
# 100| 1: [Binary] Binary
# 100| 0: [Identifier] x
# 100| 1: [ReservedWord] +
# 100| 2: [Integer] 1
# 100| 2: [ReservedWord] )
# 101| 1: [Call] Call
# 101| 0: [Identifier] print
# 101| 1: [ArgumentList] ArgumentList
# 101| 0: [ReservedWord] (
# 101| 1: [Binary] Binary
# 101| 0: [Identifier] k
# 101| 1: [ReservedWord] +
# 101| 2: [Integer] 1
# 101| 2: [ReservedWord] )
# 102| 4: [ReservedWord] end
# 103| 3: [ReservedWord] end
# 105| 26: [Class] Class
# 105| 0: [ReservedWord] class
# 105| 1: [Constant] Sub
# 105| 2: [Superclass] Superclass
# 105| 0: [ReservedWord] <
# 105| 1: [Constant] Sup
# 106| 3: [BodyStatement] BodyStatement
# 106| 0: [Method] Method
# 106| 0: [ReservedWord] def
# 106| 1: [Identifier] m
# 106| 2: [MethodParameters] MethodParameters
# 106| 0: [ReservedWord] (
# 106| 1: [Identifier] y
# 106| 2: [ReservedWord] ,
# 106| 3: [SplatParameter] SplatParameter
# 106| 0: [ReservedWord] *
# 106| 1: [Identifier] rest
# 106| 4: [ReservedWord] ,
# 106| 5: [KeywordParameter] KeywordParameter
# 106| 0: [Identifier] k
# 106| 1: [ReservedWord] :
# 106| 6: [ReservedWord] ,
# 106| 7: [HashSplatParameter] HashSplatParameter
# 106| 0: [ReservedWord] **
# 106| 1: [Identifier] kwargs
# 106| 8: [ReservedWord] )
# 107| 3: [BodyStatement] BodyStatement
# 107| 0: [Super] super
# 108| 4: [ReservedWord] end
# 109| 4: [ReservedWord] end
# 111| 27: [Call] Call
# 111| 0: [Call] Call
# 111| 0: [Constant] Sub
# 111| 1: [ReservedWord] .
# 111| 2: [Identifier] new
# 111| 1: [ReservedWord] .
# 111| 2: [Identifier] m
# 111| 3: [ArgumentList] ArgumentList
# 111| 0: [ReservedWord] (
# 111| 1: [Integer] 42
# 111| 2: [ReservedWord] ,
# 111| 3: [Pair] Pair
# 111| 0: [HashKeySymbol] k
# 111| 1: [ReservedWord] :
# 111| 2: [Integer] 22
# 111| 4: [ReservedWord] )
# 1| [Comment] # Tests for the different kinds and contexts of parameters.
# 3| [Comment] # Method containing identifier parameters
# 7| [Comment] # Block containing identifier parameters

View File

@@ -941,6 +941,12 @@ exprValue
| params/params.rb:65:41:65:42 | 99 | 99 | int |
| params/params.rb:70:42:70:45 | 1000 | 1000 | int |
| params/params.rb:70:52:70:53 | 20 | 20 | int |
| params/params.rb:100:15:100:15 | 1 | 1 | int |
| params/params.rb:101:15:101:15 | 1 | 1 | int |
| params/params.rb:107:5:107:9 | k | :k | symbol |
| params/params.rb:111:11:111:12 | 42 | 42 | int |
| params/params.rb:111:15:111:15 | :k | :k | symbol |
| params/params.rb:111:18:111:19 | 22 | 22 | int |
exprCfgNodeValue
| calls/calls.rb:8:1:8:3 | 123 | 123 | int |
| calls/calls.rb:11:5:11:5 | 0 | 0 | int |
@@ -1855,3 +1861,9 @@ exprCfgNodeValue
| params/params.rb:65:41:65:42 | 99 | 99 | int |
| params/params.rb:70:42:70:45 | 1000 | 1000 | int |
| params/params.rb:70:52:70:53 | 20 | 20 | int |
| params/params.rb:100:15:100:15 | 1 | 1 | int |
| params/params.rb:101:15:101:15 | 1 | 1 | int |
| params/params.rb:107:5:107:9 | k | :k | symbol |
| params/params.rb:111:11:111:12 | 42 | 42 | int |
| params/params.rb:111:15:111:15 | :k | :k | symbol |
| params/params.rb:111:18:111:19 | 22 | 22 | int |

View File

@@ -39,6 +39,14 @@ idParams
| params.rb:86:14:86:14 | x | x |
| params.rb:89:31:89:35 | array | array |
| params.rb:94:36:94:39 | hash | hash |
| params.rb:99:9:99:9 | x | x |
| params.rb:99:12:99:16 | *rest | rest |
| params.rb:99:19:99:19 | k | k |
| params.rb:99:23:99:30 | **kwargs | kwargs |
| params.rb:106:9:106:9 | y | y |
| params.rb:106:12:106:16 | *rest | rest |
| params.rb:106:19:106:19 | k | k |
| params.rb:106:23:106:30 | **kwargs | kwargs |
blockParams
| params.rb:46:28:46:33 | &block | block |
| params.rb:62:29:62:34 | &block | block |
@@ -56,10 +64,14 @@ splatParams
| params.rb:30:31:30:36 | *splat | splat |
| params.rb:34:21:34:26 | *splat | splat |
| params.rb:38:29:38:33 | *blah | blah |
| params.rb:99:12:99:16 | *rest | rest |
| params.rb:106:12:106:16 | *rest | rest |
hashSplatParams
| params.rb:30:39:30:52 | **double_splat | double_splat |
| params.rb:34:29:34:42 | **double_splat | double_splat |
| params.rb:38:36:38:43 | **wibble | wibble |
| params.rb:99:23:99:30 | **kwargs | kwargs |
| params.rb:106:23:106:30 | **kwargs | kwargs |
keywordParams
| params.rb:41:35:41:37 | foo | foo | (none) |
| params.rb:41:41:41:43 | bar | bar | 7 |
@@ -67,6 +79,8 @@ keywordParams
| params.rb:49:33:49:34 | yy | yy | 100 |
| params.rb:53:37:53:37 | y | y | (none) |
| params.rb:53:41:53:41 | z | z | 3 |
| params.rb:99:19:99:19 | k | k | (none) |
| params.rb:106:19:106:19 | k | k | (none) |
optionalParams
| params.rb:58:39:58:42 | val2 | val2 | params.rb:58:46:58:46 | 0 |
| params.rb:58:49:58:52 | val3 | val3 | params.rb:58:56:58:58 | 100 |
@@ -97,6 +111,14 @@ paramsInMethods
| params.rb:89:1:91:3 | anonymous_splat_parameter | 1 | params.rb:89:38:89:38 | * | SplatParameter |
| params.rb:94:1:96:3 | anonymous_hash_splat_parameter | 0 | params.rb:94:36:94:39 | hash | SimpleParameter |
| params.rb:94:1:96:3 | anonymous_hash_splat_parameter | 1 | params.rb:94:42:94:43 | ** | HashSplatParameter |
| params.rb:99:3:102:5 | m | 0 | params.rb:99:9:99:9 | x | SimpleParameter |
| params.rb:99:3:102:5 | m | 1 | params.rb:99:12:99:16 | *rest | SplatParameter |
| params.rb:99:3:102:5 | m | 2 | params.rb:99:19:99:19 | k | KeywordParameter |
| params.rb:99:3:102:5 | m | 3 | params.rb:99:23:99:30 | **kwargs | HashSplatParameter |
| params.rb:106:3:108:5 | m | 0 | params.rb:106:9:106:9 | y | SimpleParameter |
| params.rb:106:3:108:5 | m | 1 | params.rb:106:12:106:16 | *rest | SplatParameter |
| params.rb:106:3:108:5 | m | 2 | params.rb:106:19:106:19 | k | KeywordParameter |
| params.rb:106:3:108:5 | m | 3 | params.rb:106:23:106:30 | **kwargs | HashSplatParameter |
paramsInBlocks
| params.rb:9:11:11:3 | do ... end | 0 | params.rb:9:15:9:17 | key | SimpleParameter |
| params.rb:9:11:11:3 | do ... end | 1 | params.rb:9:20:9:24 | value | SimpleParameter |
@@ -175,3 +197,11 @@ params
| params.rb:89:38:89:38 | * | 1 | SplatParameter |
| params.rb:94:36:94:39 | hash | 0 | SimpleParameter |
| params.rb:94:42:94:43 | ** | 1 | HashSplatParameter |
| params.rb:99:9:99:9 | x | 0 | SimpleParameter |
| params.rb:99:12:99:16 | *rest | 1 | SplatParameter |
| params.rb:99:19:99:19 | k | 2 | KeywordParameter |
| params.rb:99:23:99:30 | **kwargs | 3 | HashSplatParameter |
| params.rb:106:9:106:9 | y | 0 | SimpleParameter |
| params.rb:106:12:106:16 | *rest | 1 | SplatParameter |
| params.rb:106:19:106:19 | k | 2 | KeywordParameter |
| params.rb:106:23:106:30 | **kwargs | 3 | HashSplatParameter |

View File

@@ -94,3 +94,18 @@ end
def anonymous_hash_splat_parameter(hash, **)
hash.merge(**)
end
class Sup
def m(x, *rest, k:, **kwargs)
print(x + 1)
print(k + 1)
end
end
class Sub < Sup
def m(y, *rest, k:, **kwargs)
super
end
end
Sub.new.m(42, k: 22)

File diff suppressed because it is too large Load Diff

View File

@@ -174,6 +174,34 @@ edges
| params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:181:28:181:29 | p2 | provenance | |
| params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:192:20:192:21 | [post] p1 : [collection] [element 0] | provenance | |
| params_flow.rb:193:6:193:7 | p1 : [collection] [element 0] | params_flow.rb:193:6:193:10 | ...[...] | provenance | |
| params_flow.rb:210:11:210:11 | x | params_flow.rb:211:14:211:14 | x | provenance | |
| params_flow.rb:210:14:210:18 | *rest : [collection] [element 0] | params_flow.rb:212:14:212:17 | rest : [collection] [element 0] | provenance | |
| params_flow.rb:210:14:210:18 | *rest : [collection] [element 2] | params_flow.rb:214:14:214:17 | rest : [collection] [element 2] | provenance | |
| params_flow.rb:210:21:210:22 | k1 | params_flow.rb:215:14:215:15 | k1 | provenance | |
| params_flow.rb:210:26:210:33 | **kwargs : Hash [element :k2] | params_flow.rb:216:14:216:19 | kwargs : Hash [element :k2] | provenance | |
| params_flow.rb:212:14:212:17 | rest : [collection] [element 0] | params_flow.rb:212:14:212:20 | ...[...] | provenance | |
| params_flow.rb:214:14:214:17 | rest : [collection] [element 2] | params_flow.rb:214:14:214:20 | ...[...] | provenance | |
| params_flow.rb:216:14:216:19 | kwargs : Hash [element :k2] | params_flow.rb:216:14:216:24 | ...[...] | provenance | |
| params_flow.rb:217:15:217:23 | call to taint | params_flow.rb:227:81:227:81 | x | provenance | |
| params_flow.rb:222:11:222:11 | x | params_flow.rb:223:9:223:13 | x | provenance | |
| params_flow.rb:222:14:222:18 | *rest : [collection] [element 0] | params_flow.rb:223:9:223:13 | rest : [collection] [element 0] | provenance | |
| params_flow.rb:222:14:222:18 | *rest : [collection] [element 2] | params_flow.rb:223:9:223:13 | rest : [collection] [element 2] | provenance | |
| params_flow.rb:222:21:222:22 | k1 | params_flow.rb:223:9:223:13 | k1 | provenance | |
| params_flow.rb:222:26:222:33 | **kwargs : Hash [element :k2] | params_flow.rb:223:9:223:13 | kwargs : Hash [element :k2] | provenance | |
| params_flow.rb:223:9:223:13 | * ... : [collection] [element 0] | params_flow.rb:210:14:210:18 | *rest : [collection] [element 0] | provenance | |
| params_flow.rb:223:9:223:13 | * ... : [collection] [element 2] | params_flow.rb:210:14:210:18 | *rest : [collection] [element 2] | provenance | |
| params_flow.rb:223:9:223:13 | ** ... : Hash [element :k2] | params_flow.rb:210:26:210:33 | **kwargs : Hash [element :k2] | provenance | |
| params_flow.rb:223:9:223:13 | k1 | params_flow.rb:210:21:210:22 | k1 | provenance | |
| params_flow.rb:223:9:223:13 | kwargs : Hash [element :k2] | params_flow.rb:223:9:223:13 | ** ... : Hash [element :k2] | provenance | |
| params_flow.rb:223:9:223:13 | rest : [collection] [element 0] | params_flow.rb:223:9:223:13 | * ... : [collection] [element 0] | provenance | |
| params_flow.rb:223:9:223:13 | rest : [collection] [element 2] | params_flow.rb:223:9:223:13 | * ... : [collection] [element 2] | provenance | |
| params_flow.rb:223:9:223:13 | x | params_flow.rb:210:11:210:11 | x | provenance | |
| params_flow.rb:227:11:227:19 | call to taint | params_flow.rb:222:11:222:11 | x | provenance | |
| params_flow.rb:227:22:227:30 | call to taint | params_flow.rb:222:14:222:18 | *rest : [collection] [element 0] | provenance | |
| params_flow.rb:227:36:227:44 | call to taint | params_flow.rb:222:14:222:18 | *rest : [collection] [element 2] | provenance | |
| params_flow.rb:227:51:227:59 | call to taint | params_flow.rb:222:21:222:22 | k1 | provenance | |
| params_flow.rb:227:66:227:74 | call to taint | params_flow.rb:222:26:222:33 | **kwargs : Hash [element :k2] | provenance | |
| params_flow.rb:227:81:227:81 | x | params_flow.rb:228:10:228:10 | x | provenance | |
nodes
| params_flow.rb:9:16:9:17 | p1 | semmle.label | p1 |
| params_flow.rb:9:20:9:21 | p2 | semmle.label | p2 |
@@ -373,6 +401,40 @@ nodes
| params_flow.rb:192:24:192:32 | call to taint | semmle.label | call to taint |
| params_flow.rb:193:6:193:7 | p1 : [collection] [element 0] | semmle.label | p1 : [collection] [element 0] |
| params_flow.rb:193:6:193:10 | ...[...] | semmle.label | ...[...] |
| params_flow.rb:210:11:210:11 | x | semmle.label | x |
| params_flow.rb:210:14:210:18 | *rest : [collection] [element 0] | semmle.label | *rest : [collection] [element 0] |
| params_flow.rb:210:14:210:18 | *rest : [collection] [element 2] | semmle.label | *rest : [collection] [element 2] |
| params_flow.rb:210:21:210:22 | k1 | semmle.label | k1 |
| params_flow.rb:210:26:210:33 | **kwargs : Hash [element :k2] | semmle.label | **kwargs : Hash [element :k2] |
| params_flow.rb:211:14:211:14 | x | semmle.label | x |
| params_flow.rb:212:14:212:17 | rest : [collection] [element 0] | semmle.label | rest : [collection] [element 0] |
| params_flow.rb:212:14:212:20 | ...[...] | semmle.label | ...[...] |
| params_flow.rb:214:14:214:17 | rest : [collection] [element 2] | semmle.label | rest : [collection] [element 2] |
| params_flow.rb:214:14:214:20 | ...[...] | semmle.label | ...[...] |
| params_flow.rb:215:14:215:15 | k1 | semmle.label | k1 |
| params_flow.rb:216:14:216:19 | kwargs : Hash [element :k2] | semmle.label | kwargs : Hash [element :k2] |
| params_flow.rb:216:14:216:24 | ...[...] | semmle.label | ...[...] |
| params_flow.rb:217:15:217:23 | call to taint | semmle.label | call to taint |
| params_flow.rb:222:11:222:11 | x | semmle.label | x |
| params_flow.rb:222:14:222:18 | *rest : [collection] [element 0] | semmle.label | *rest : [collection] [element 0] |
| params_flow.rb:222:14:222:18 | *rest : [collection] [element 2] | semmle.label | *rest : [collection] [element 2] |
| params_flow.rb:222:21:222:22 | k1 | semmle.label | k1 |
| params_flow.rb:222:26:222:33 | **kwargs : Hash [element :k2] | semmle.label | **kwargs : Hash [element :k2] |
| params_flow.rb:223:9:223:13 | * ... : [collection] [element 0] | semmle.label | * ... : [collection] [element 0] |
| params_flow.rb:223:9:223:13 | * ... : [collection] [element 2] | semmle.label | * ... : [collection] [element 2] |
| params_flow.rb:223:9:223:13 | ** ... : Hash [element :k2] | semmle.label | ** ... : Hash [element :k2] |
| params_flow.rb:223:9:223:13 | k1 | semmle.label | k1 |
| params_flow.rb:223:9:223:13 | kwargs : Hash [element :k2] | semmle.label | kwargs : Hash [element :k2] |
| params_flow.rb:223:9:223:13 | rest : [collection] [element 0] | semmle.label | rest : [collection] [element 0] |
| params_flow.rb:223:9:223:13 | rest : [collection] [element 2] | semmle.label | rest : [collection] [element 2] |
| params_flow.rb:223:9:223:13 | x | semmle.label | x |
| params_flow.rb:227:11:227:19 | call to taint | semmle.label | call to taint |
| params_flow.rb:227:22:227:30 | call to taint | semmle.label | call to taint |
| params_flow.rb:227:36:227:44 | call to taint | semmle.label | call to taint |
| params_flow.rb:227:51:227:59 | call to taint | semmle.label | call to taint |
| params_flow.rb:227:66:227:74 | call to taint | semmle.label | call to taint |
| params_flow.rb:227:81:227:81 | x | semmle.label | x |
| params_flow.rb:228:10:228:10 | x | semmle.label | x |
subpaths
| params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:153:28:153:29 | p2 | params_flow.rb:153:23:153:24 | p1 [Return] : [collection] [element 0] | params_flow.rb:164:23:164:24 | [post] p1 : [collection] [element 0] |
| params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:181:28:181:29 | p2 | params_flow.rb:181:24:181:25 | p1 [Return] : [collection] [element 0] | params_flow.rb:192:20:192:21 | [post] p1 : [collection] [element 0] |
@@ -430,3 +492,9 @@ testFailures
| params_flow.rb:134:10:134:16 | ...[...] | params_flow.rb:137:23:137:31 | call to taint | params_flow.rb:134:10:134:16 | ...[...] | $@ | params_flow.rb:137:23:137:31 | call to taint | call to taint |
| params_flow.rb:165:6:165:10 | ...[...] | params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:165:6:165:10 | ...[...] | $@ | params_flow.rb:164:31:164:39 | call to taint | call to taint |
| params_flow.rb:193:6:193:10 | ...[...] | params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:193:6:193:10 | ...[...] | $@ | params_flow.rb:192:24:192:32 | call to taint | call to taint |
| params_flow.rb:211:14:211:14 | x | params_flow.rb:227:11:227:19 | call to taint | params_flow.rb:211:14:211:14 | x | $@ | params_flow.rb:227:11:227:19 | call to taint | call to taint |
| params_flow.rb:212:14:212:20 | ...[...] | params_flow.rb:227:22:227:30 | call to taint | params_flow.rb:212:14:212:20 | ...[...] | $@ | params_flow.rb:227:22:227:30 | call to taint | call to taint |
| params_flow.rb:214:14:214:20 | ...[...] | params_flow.rb:227:36:227:44 | call to taint | params_flow.rb:214:14:214:20 | ...[...] | $@ | params_flow.rb:227:36:227:44 | call to taint | call to taint |
| params_flow.rb:215:14:215:15 | k1 | params_flow.rb:227:51:227:59 | call to taint | params_flow.rb:215:14:215:15 | k1 | $@ | params_flow.rb:227:51:227:59 | call to taint | call to taint |
| params_flow.rb:216:14:216:24 | ...[...] | params_flow.rb:227:66:227:74 | call to taint | params_flow.rb:216:14:216:24 | ...[...] | $@ | params_flow.rb:227:66:227:74 | call to taint | call to taint |
| params_flow.rb:228:10:228:10 | x | params_flow.rb:217:15:217:23 | call to taint | params_flow.rb:228:10:228:10 | x | $@ | params_flow.rb:217:15:217:23 | call to taint | call to taint |

View File

@@ -205,3 +205,25 @@ def foo(x, y)
end
foo(*int_hash)
class Sup
def m(x, *rest, k1:, **kwargs)
sink(x) # $ hasValueFlow=81
sink(rest[0]) # $ hasValueFlow=82
sink(rest[1])
sink(rest[2]) # $ hasValueFlow=83
sink(k1) # $ hasValueFlow=84
sink(kwargs[:k2]) # $ hasValueFlow=85
yield taint(86)
end
end
class Sub < Sup
def m(x, *rest, k1:, **kwargs)
super
end
end
Sub.new.m(taint(81), taint(82), 0, taint(83), k1: taint(84), k2: taint(85)) do |x|
sink(x) # $ hasValueFlow=86
end