Skip to content

Commit 051754c

Browse files
committed
Ruby: Add test of what Argument[any] for input/output includes
and an explicit test of what `Argument[self]` includes.
1 parent eef5022 commit 051754c

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ edges
2323
| summaries.rb:1:11:1:36 | call to identity : | summaries.rb:55:17:55:23 | tainted : |
2424
| summaries.rb:1:11:1:36 | call to identity : | summaries.rb:58:32:58:38 | tainted : |
2525
| summaries.rb:1:11:1:36 | call to identity : | summaries.rb:60:23:60:29 | tainted : |
26+
| summaries.rb:1:11:1:36 | call to identity : | summaries.rb:90:16:90:22 | tainted : |
27+
| summaries.rb:1:11:1:36 | call to identity : | summaries.rb:96:14:96:20 | tainted : |
2628
| summaries.rb:1:20:1:36 | call to source : | summaries.rb:1:11:1:36 | call to identity : |
2729
| summaries.rb:1:20:1:36 | call to source : | summaries.rb:1:11:1:36 | call to identity : |
2830
| summaries.rb:4:12:7:3 | call to apply_block : | summaries.rb:9:6:9:13 | tainted2 |
@@ -86,6 +88,16 @@ edges
8688
| summaries.rb:82:1:82:1 | a [element 2] : | summaries.rb:82:1:82:1 | [post] a [element 2] : |
8789
| summaries.rb:85:6:85:6 | a [element 2] : | summaries.rb:85:6:85:9 | ...[...] |
8890
| summaries.rb:85:6:85:6 | a [element 2] : | summaries.rb:85:6:85:9 | ...[...] |
91+
| summaries.rb:90:1:90:1 | [post] x : | summaries.rb:91:6:91:6 | x |
92+
| summaries.rb:90:16:90:22 | [post] tainted : | summaries.rb:96:14:96:20 | tainted : |
93+
| summaries.rb:90:16:90:22 | tainted : | summaries.rb:90:1:90:1 | [post] x : |
94+
| summaries.rb:90:16:90:22 | tainted : | summaries.rb:90:16:90:22 | [post] tainted : |
95+
| summaries.rb:90:16:90:22 | tainted : | summaries.rb:90:25:90:25 | [post] y : |
96+
| summaries.rb:90:16:90:22 | tainted : | summaries.rb:90:33:90:33 | [post] z : |
97+
| summaries.rb:90:25:90:25 | [post] y : | summaries.rb:92:6:92:6 | y |
98+
| summaries.rb:90:33:90:33 | [post] z : | summaries.rb:93:6:93:6 | z |
99+
| summaries.rb:96:1:96:1 | [post] x : | summaries.rb:97:6:97:6 | x |
100+
| summaries.rb:96:14:96:20 | tainted : | summaries.rb:96:1:96:1 | [post] x : |
89101
nodes
90102
| summaries.rb:1:11:1:36 | call to identity : | semmle.label | call to identity : |
91103
| summaries.rb:1:11:1:36 | call to identity : | semmle.label | call to identity : |
@@ -183,6 +195,17 @@ nodes
183195
| summaries.rb:85:6:85:6 | a [element 2] : | semmle.label | a [element 2] : |
184196
| summaries.rb:85:6:85:9 | ...[...] | semmle.label | ...[...] |
185197
| summaries.rb:85:6:85:9 | ...[...] | semmle.label | ...[...] |
198+
| summaries.rb:90:1:90:1 | [post] x : | semmle.label | [post] x : |
199+
| summaries.rb:90:16:90:22 | [post] tainted : | semmle.label | [post] tainted : |
200+
| summaries.rb:90:16:90:22 | tainted : | semmle.label | tainted : |
201+
| summaries.rb:90:25:90:25 | [post] y : | semmle.label | [post] y : |
202+
| summaries.rb:90:33:90:33 | [post] z : | semmle.label | [post] z : |
203+
| summaries.rb:91:6:91:6 | x | semmle.label | x |
204+
| summaries.rb:92:6:92:6 | y | semmle.label | y |
205+
| summaries.rb:93:6:93:6 | z | semmle.label | z |
206+
| summaries.rb:96:1:96:1 | [post] x : | semmle.label | [post] x : |
207+
| summaries.rb:96:14:96:20 | tainted : | semmle.label | tainted : |
208+
| summaries.rb:97:6:97:6 | x | semmle.label | x |
186209
subpaths
187210
invalidSpecComponent
188211
#select
@@ -227,6 +250,10 @@ invalidSpecComponent
227250
| summaries.rb:80:6:80:9 | ...[...] | summaries.rb:74:15:74:29 | call to source : | summaries.rb:80:6:80:9 | ...[...] | $@ | summaries.rb:74:15:74:29 | call to source : | call to source : |
228251
| summaries.rb:85:6:85:9 | ...[...] | summaries.rb:74:32:74:46 | call to source : | summaries.rb:85:6:85:9 | ...[...] | $@ | summaries.rb:74:32:74:46 | call to source : | call to source : |
229252
| summaries.rb:85:6:85:9 | ...[...] | summaries.rb:74:32:74:46 | call to source : | summaries.rb:85:6:85:9 | ...[...] | $@ | summaries.rb:74:32:74:46 | call to source : | call to source : |
253+
| summaries.rb:91:6:91:6 | x | summaries.rb:1:20:1:36 | call to source : | summaries.rb:91:6:91:6 | x | $@ | summaries.rb:1:20:1:36 | call to source : | call to source : |
254+
| summaries.rb:92:6:92:6 | y | summaries.rb:1:20:1:36 | call to source : | summaries.rb:92:6:92:6 | y | $@ | summaries.rb:1:20:1:36 | call to source : | call to source : |
255+
| summaries.rb:93:6:93:6 | z | summaries.rb:1:20:1:36 | call to source : | summaries.rb:93:6:93:6 | z | $@ | summaries.rb:1:20:1:36 | call to source : | call to source : |
256+
| summaries.rb:97:6:97:6 | x | summaries.rb:1:20:1:36 | call to source : | summaries.rb:97:6:97:6 | x | $@ | summaries.rb:1:20:1:36 | call to source : | call to source : |
230257
warning
231258
| CSV type row should have 5 columns but has 2: test;TooFewColumns |
232259
| CSV type row should have 5 columns but has 8: test;TooManyColumns;;;Member[Foo].Instance;too;many;columns |

ruby/ql/test/library-tests/dataflow/summaries/Summaries.ql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ private class StepsFromModel extends ModelInput::SummaryModelCsv {
7878
";;Member[Foo].Method[intoNamedParameter];Argument[0];Argument[0].Parameter[foo:];taint",
7979
";;Member[Foo].Method[startInNamedCallback].Argument[foo:].Parameter[0].Method[preserveTaint];Argument[0];ReturnValue;taint",
8080
";;Member[Foo].Method[startInNamedParameter].Argument[0].Parameter[foo:].Method[preserveTaint];Argument[0];ReturnValue;taint",
81+
";;Member[Foo].Instance.Method[flowToAnyArg];Argument[0];Argument[any];taint",
82+
";;Member[Foo].Instance.Method[flowToSelf];Argument[0];Argument[self];taint",
8183
";any;Method[matchedByName];Argument[0];ReturnValue;taint",
8284
";any;Method[matchedByNameRcv];Argument[self];ReturnValue;taint",
8385
";any;Method[withElementOne];Argument[self].WithElement[1];ReturnValue;value",

ruby/ql/test/library-tests/dataflow/summaries/summaries.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,16 @@ def userDefinedFunction(x, y)
8282
a.withoutElementOne()
8383
sink(a[0])
8484
sink(a[1])
85-
sink(a[2]) # $ hasValueFlow=elem2
85+
sink(a[2]) # $ hasValueFlow=elem2
86+
87+
x = Foo.new
88+
y = []
89+
z = []
90+
x.flowToAnyArg(tainted, y, key: z)
91+
sink(x) # $ hasTaintFlow=tainted
92+
sink(y) # $ hasTaintFlow=tainted
93+
sink(z) # $ hasTaintFlow=tainted
94+
95+
x = Foo.new
96+
x.flowToSelf(tainted)
97+
sink(x) # $ hasTaintFlow=tainted

0 commit comments

Comments
 (0)