Skip to content

Commit aa93986

Browse files
committed
Ruby: Add tests that demonstrate missing flow through positional arguments
1 parent 28e4224 commit aa93986

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
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
@@ -36,6 +36,10 @@ edges
3636
| params_flow.rb:41:13:41:21 | call to taint : | params_flow.rb:16:18:16:19 | p2 : |
3737
| params_flow.rb:41:24:41:29 | ** ... [element :p1] : | params_flow.rb:16:13:16:14 | p1 : |
3838
| params_flow.rb:41:26:41:29 | args [element :p1] : | params_flow.rb:41:24:41:29 | ** ... [element :p1] : |
39+
| params_flow.rb:44:12:44:20 | call to taint : | params_flow.rb:9:16:9:17 | p1 : |
40+
| params_flow.rb:49:13:49:14 | p1 : | params_flow.rb:50:10:50:11 | p1 |
41+
| params_flow.rb:54:9:54:17 | call to taint : | params_flow.rb:49:13:49:14 | p1 : |
42+
| params_flow.rb:57:9:57:17 | call to taint : | params_flow.rb:49:13:49:14 | p1 : |
3943
nodes
4044
| params_flow.rb:9:16:9:17 | p1 : | semmle.label | p1 : |
4145
| params_flow.rb:9:20:9:21 | p2 : | semmle.label | p2 : |
@@ -80,9 +84,15 @@ nodes
8084
| params_flow.rb:41:13:41:21 | call to taint : | semmle.label | call to taint : |
8185
| params_flow.rb:41:24:41:29 | ** ... [element :p1] : | semmle.label | ** ... [element :p1] : |
8286
| params_flow.rb:41:26:41:29 | args [element :p1] : | semmle.label | args [element :p1] : |
87+
| params_flow.rb:44:12:44:20 | call to taint : | semmle.label | call to taint : |
88+
| params_flow.rb:49:13:49:14 | p1 : | semmle.label | p1 : |
89+
| params_flow.rb:50:10:50:11 | p1 | semmle.label | p1 |
90+
| params_flow.rb:54:9:54:17 | call to taint : | semmle.label | call to taint : |
91+
| params_flow.rb:57:9:57:17 | call to taint : | semmle.label | call to taint : |
8392
subpaths
8493
#select
8594
| 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 : |
95+
| params_flow.rb:10:10:10:11 | p1 | params_flow.rb:44:12:44:20 | call to taint : | params_flow.rb:10:10:10:11 | p1 | $@ | params_flow.rb:44:12:44:20 | call to taint : | call to taint : |
8696
| params_flow.rb:11:10:11:11 | p2 | params_flow.rb:14:22:14:29 | call to taint : | params_flow.rb:11:10:11:11 | p2 | $@ | params_flow.rb:14:22:14:29 | call to taint : | call to taint : |
8797
| params_flow.rb:17:10:17:11 | p1 | params_flow.rb:21:13:21:20 | call to taint : | params_flow.rb:17:10:17:11 | p1 | $@ | params_flow.rb:21:13:21:20 | call to taint : | call to taint : |
8898
| params_flow.rb:17:10:17:11 | p1 | params_flow.rb:22:27:22:34 | call to taint : | params_flow.rb:17:10:17:11 | p1 | $@ | params_flow.rb:22:27:22:34 | call to taint : | call to taint : |
@@ -99,3 +109,5 @@ subpaths
99109
| 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 : |
100110
| 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 : |
101111
| 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 : |
112+
| params_flow.rb:50:10:50:11 | p1 | params_flow.rb:54:9:54:17 | call to taint : | params_flow.rb:50:10:50:11 | p1 | $@ | params_flow.rb:54:9:54:17 | call to taint : | call to taint : |
113+
| params_flow.rb:50:10:50:11 | p1 | params_flow.rb:57:9:57:17 | call to taint : | params_flow.rb:50:10:50:11 | p1 | $@ | params_flow.rb:57:9:57:17 | call to taint : | call to taint : |

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

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ def sink x
77
end
88

99
def positional(p1, p2)
10-
sink p1 # $ hasValueFlow=1
11-
sink p2 # $ hasValueFlow=2
10+
sink p1 # $ hasValueFlow=1 $ hasValueFlow=16 $ MISSING: hasValueFlow=18
11+
sink p2 # $ hasValueFlow=2 $ MISSING: hasValueFlow=17 $ MISSING: hasValueFlow=19
1212
end
1313

1414
positional(taint(1), taint(2))
@@ -39,3 +39,22 @@ def kwargs(p1:, **kwargs)
3939

4040
args = {:p1 => taint(16) }
4141
keyword(p2: taint(17), **args)
42+
43+
args = [taint(17)]
44+
positional(taint(16), *args)
45+
46+
args = [taint(18), taint(19)]
47+
positional(*args)
48+
49+
def posargs(p1, *posargs)
50+
sink p1 # $ hasValueFlow=20 $ hasValueFlow=23 $ MISSING: hasValueFlow=24
51+
sink (posargs[0]) # $ MISSING: hasValueFlow=21 $ MISSING: hasValueFlow=22 $ MISSING: hasValueFlow=25
52+
end
53+
54+
posargs(taint(20), taint(21))
55+
56+
args = [taint(22)]
57+
posargs(taint(23), *args)
58+
59+
args = [taint(24), taint(25)]
60+
posargs(*args)

0 commit comments

Comments
 (0)