File tree Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change @@ -100,6 +100,47 @@ Any keyword argument to the call.
100
100
101
101
#### ` hash-splat `
102
102
The special "hash splat" argument/parameter, which is written as ` **args ` .
103
+ When used in an ` Argument ` component, this specifier refers to special dataflow
104
+ node which is constructed at the call site, containing any elements in a hash
105
+ splat argument (` **args ` ) along with any explicit keyword arguments (`foo:
106
+ bar`). The node behaves like a normal dataflow node for a hash, meaning that you
107
+ can access specific elements of it using the ` Element ` component.
108
+
109
+ For example, the following flow summary states that values flow from any keyword
110
+ arguments (including those in a hash splat) to the return value:
111
+
112
+ ``` ql
113
+ input = "Argument[hash-splat].Element[any]" and
114
+ output = "ReturnValue" and
115
+ preservesValue = true
116
+ ```
117
+
118
+ Assuming this summary is for a global method ` foo ` , the following test will pass:
119
+
120
+ ``` rb
121
+ a = source " a"
122
+ b = source " b"
123
+
124
+ h = {a: a}
125
+
126
+ x = foo(b: b, ** h)
127
+
128
+ sink x # $ hasValueFlow=a hasValueFlow=b
129
+ ```
130
+
131
+ If the method returns the hash itself, you will need to use ` WithElement ` in
132
+ order to preserve taint/value in its elements. For example:
133
+
134
+ ``` ql
135
+ input = "Argument[hash-splat].WithElement[any]" and
136
+ output = "ReturnValue" and
137
+ preservesValue = true
138
+ ```
139
+ ``` rb
140
+ a = source " a"
141
+ x = foo(a: a)
142
+ sink x[:a ] # $ hasValueFlow=a
143
+ ```
103
144
104
145
## ` ReturnValue `
105
146
` ReturnValue ` refers to the return value of the element identified in the
You can’t perform that action at this time.
0 commit comments