Skip to content

Commit 38ede25

Browse files
committed
Ruby: Add test that illustrates missing flow for keyword arguments
1 parent 935def7 commit 38ede25

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

ruby/ql/test/library-tests/dataflow/params/params-flow.expected

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
failures
2+
| params_flow.rb:17:13:17:82 | # $ hasValueFlow=3 $ hasValueFlow=6 $ hasValueFlow=8 $ hasValueFlow=16 | Missing result:hasValueFlow=16 |
3+
| params_flow.rb:26:13:26:66 | # $ hasValueFlow=9 $ hasValueFlow=13 $ hasValueFlow=14 | Missing result:hasValueFlow=14 |
24
edges
35
| params_flow.rb:9:16:9:17 | p1 : | params_flow.rb:10:10:10:11 | p1 |
46
| params_flow.rb:9:20:9:21 | p2 : | params_flow.rb:11:10:11:11 | p2 |
@@ -26,6 +28,10 @@ edges
2628
| params_flow.rb:35:12:35:20 | call to taint : | params_flow.rb:25:12:25:13 | p1 : |
2729
| params_flow.rb:35:23:35:28 | ** ... [element :p3] : | params_flow.rb:25:17:25:24 | **kwargs [element :p3] : |
2830
| params_flow.rb:35:25:35:28 | args [element :p3] : | params_flow.rb:35:23:35:28 | ** ... [element :p3] : |
31+
| params_flow.rb:37:34:37:42 | call to taint : | params_flow.rb:38:10:38:13 | args [element :p2] : |
32+
| params_flow.rb:38:8:38:13 | ** ... [element :p2] : | params_flow.rb:25:17:25:24 | **kwargs [element :p2] : |
33+
| params_flow.rb:38:10:38:13 | args [element :p2] : | params_flow.rb:38:8:38:13 | ** ... [element :p2] : |
34+
| params_flow.rb:41:13:41:21 | call to taint : | params_flow.rb:16:18:16:19 | p2 : |
2935
nodes
3036
| params_flow.rb:9:16:9:17 | p1 : | semmle.label | p1 : |
3137
| params_flow.rb:9:20:9:21 | p2 : | semmle.label | p2 : |
@@ -60,6 +66,10 @@ nodes
6066
| params_flow.rb:35:12:35:20 | call to taint : | semmle.label | call to taint : |
6167
| params_flow.rb:35:23:35:28 | ** ... [element :p3] : | semmle.label | ** ... [element :p3] : |
6268
| params_flow.rb:35:25:35:28 | args [element :p3] : | semmle.label | args [element :p3] : |
69+
| params_flow.rb:37:34:37:42 | call to taint : | semmle.label | call to taint : |
70+
| params_flow.rb:38:8:38:13 | ** ... [element :p2] : | semmle.label | ** ... [element :p2] : |
71+
| params_flow.rb:38:10:38:13 | args [element :p2] : | semmle.label | args [element :p2] : |
72+
| params_flow.rb:41:13:41:21 | call to taint : | semmle.label | call to taint : |
6373
subpaths
6474
#select
6575
| params_flow.rb:10:10:10:11 | p1 | params_flow.rb:14:12:14:19 | call to taint : | params_flow.rb:10:10:10:11 | p1 | $@ | params_flow.rb:14:12:14:19 | call to taint : | call to taint : |
@@ -70,8 +80,10 @@ subpaths
7080
| params_flow.rb:18:10:18:11 | p2 | params_flow.rb:21:27:21:34 | call to taint : | params_flow.rb:18:10:18:11 | p2 | $@ | params_flow.rb:21:27:21:34 | call to taint : | call to taint : |
7181
| params_flow.rb:18:10:18:11 | p2 | params_flow.rb:22:13:22:20 | call to taint : | params_flow.rb:18:10:18:11 | p2 | $@ | params_flow.rb:22:13:22:20 | call to taint : | call to taint : |
7282
| params_flow.rb:18:10:18:11 | p2 | params_flow.rb:23:16:23:23 | call to taint : | params_flow.rb:18:10:18:11 | p2 | $@ | params_flow.rb:23:16:23:23 | call to taint : | call to taint : |
83+
| params_flow.rb:18:10:18:11 | p2 | params_flow.rb:41:13:41:21 | call to taint : | params_flow.rb:18:10:18:11 | p2 | $@ | params_flow.rb:41:13:41:21 | call to taint : | call to taint : |
7384
| params_flow.rb:26:10:26:11 | p1 | params_flow.rb:33:12:33:19 | call to taint : | params_flow.rb:26:10:26:11 | p1 | $@ | params_flow.rb:33:12:33:19 | call to taint : | call to taint : |
7485
| params_flow.rb:26:10:26:11 | p1 | params_flow.rb:35:12:35:20 | call to taint : | params_flow.rb:26:10:26:11 | p1 | $@ | params_flow.rb:35:12:35:20 | call to taint : | call to taint : |
7586
| params_flow.rb:28:10:28:22 | ( ... ) | params_flow.rb:33:26:33:34 | call to taint : | params_flow.rb:28:10:28:22 | ( ... ) | $@ | params_flow.rb:33:26:33:34 | call to taint : | call to taint : |
87+
| params_flow.rb:28:10:28:22 | ( ... ) | params_flow.rb:37:34:37:42 | call to taint : | params_flow.rb:28:10:28:22 | ( ... ) | $@ | params_flow.rb:37:34:37:42 | call to taint : | call to taint : |
7688
| params_flow.rb:29:10:29:22 | ( ... ) | params_flow.rb:33:41:33:49 | call to taint : | params_flow.rb:29:10:29:22 | ( ... ) | $@ | params_flow.rb:33:41:33:49 | call to taint : | call to taint : |
7789
| params_flow.rb:29:10:29:22 | ( ... ) | params_flow.rb:34:14:34:22 | call to taint : | params_flow.rb:29:10:29:22 | ( ... ) | $@ | params_flow.rb:34:14:34:22 | call to taint : | call to taint : |

ruby/ql/test/library-tests/dataflow/params/params_flow.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,28 @@ def positional(p1, p2)
1414
positional(taint(1), taint(2))
1515

1616
def keyword(p1:, p2:)
17-
sink p1 # $ hasValueFlow=3 $ hasValueFlow=6 $ hasValueFlow=8
18-
sink p2 # $ hasValueFlow=4 $ hasValueFlow=5 $ hasValueFlow=7
17+
sink p1 # $ hasValueFlow=3 $ hasValueFlow=6 $ hasValueFlow=8 $ hasValueFlow=16
18+
sink p2 # $ hasValueFlow=4 $ hasValueFlow=5 $ hasValueFlow=7 $ hasValueFlow=17
1919
end
2020

2121
keyword(p1: taint(3), p2: taint(4))
2222
keyword(p2: taint(5), p1: taint(6))
2323
keyword(:p2 => taint(7), :p1 => taint(8))
2424

2525
def kwargs(p1:, **kwargs)
26-
sink p1 # $ hasValueFlow=9 $ hasValueFlow=13
26+
sink p1 # $ hasValueFlow=9 $ hasValueFlow=13 $ hasValueFlow=14
2727
sink (kwargs[:p1])
28-
sink (kwargs[:p2]) # $ hasValueFlow=10
28+
sink (kwargs[:p2]) # $ hasValueFlow=10 $ hasValueFlow=15
2929
sink (kwargs[:p3]) # $ hasValueFlow=11 $ hasValueFlow=12
3030
sink (kwargs[:p4])
3131
end
3232

3333
kwargs(p1: taint(9), p2: taint(10), p3: taint(11), p4: "")
3434
args = { p3: taint(12), p4: "" }
3535
kwargs(p1: taint(13), **args)
36+
37+
args = {:p1 => taint(14), :p2 => taint(15) }
38+
kwargs(**args)
39+
40+
args = {:p1 => taint(16) }
41+
keyword(p2: taint(17), **args)

0 commit comments

Comments
 (0)