Skip to content

Commit a191edf

Browse files
committed
Ruby: Add data flow tests that illustrate problems with flow into SSA phi nodes
1 parent 7a8c9e7 commit a191edf

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
failures
2+
| ssa_flow.rb:16:16:16:33 | # $ hasValueFlow=1 | Missing result:hasValueFlow=1 |
3+
| ssa_flow.rb:29:10:29:13 | ...[...] | Unexpected result: hasValueFlow=2 |
4+
edges
5+
| ssa_flow.rb:24:9:24:9 | [post] a [element 0] : | ssa_flow.rb:29:10:29:10 | a [element 0] : |
6+
| ssa_flow.rb:24:9:24:9 | [post] a [element 0] : | ssa_flow.rb:29:10:29:10 | a [element 0] : |
7+
| ssa_flow.rb:24:16:24:23 | call to taint : | ssa_flow.rb:24:9:24:9 | [post] a [element 0] : |
8+
| ssa_flow.rb:24:16:24:23 | call to taint : | ssa_flow.rb:24:9:24:9 | [post] a [element 0] : |
9+
| ssa_flow.rb:29:10:29:10 | a [element 0] : | ssa_flow.rb:29:10:29:13 | ...[...] |
10+
| ssa_flow.rb:29:10:29:10 | a [element 0] : | ssa_flow.rb:29:10:29:13 | ...[...] |
11+
nodes
12+
| ssa_flow.rb:24:9:24:9 | [post] a [element 0] : | semmle.label | [post] a [element 0] : |
13+
| ssa_flow.rb:24:9:24:9 | [post] a [element 0] : | semmle.label | [post] a [element 0] : |
14+
| ssa_flow.rb:24:16:24:23 | call to taint : | semmle.label | call to taint : |
15+
| ssa_flow.rb:24:16:24:23 | call to taint : | semmle.label | call to taint : |
16+
| ssa_flow.rb:29:10:29:10 | a [element 0] : | semmle.label | a [element 0] : |
17+
| ssa_flow.rb:29:10:29:10 | a [element 0] : | semmle.label | a [element 0] : |
18+
| ssa_flow.rb:29:10:29:13 | ...[...] | semmle.label | ...[...] |
19+
| ssa_flow.rb:29:10:29:13 | ...[...] | semmle.label | ...[...] |
20+
subpaths
21+
#select
22+
| ssa_flow.rb:29:10:29:13 | ...[...] | ssa_flow.rb:24:16:24:23 | call to taint : | ssa_flow.rb:29:10:29:13 | ...[...] | $@ | ssa_flow.rb:24:16:24:23 | call to taint : | call to taint : |
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/**
2+
* @kind path-problem
3+
*/
4+
5+
import codeql.ruby.AST
6+
import TestUtilities.InlineFlowTest
7+
import PathGraph
8+
9+
from DataFlow::PathNode source, DataFlow::PathNode sink, DefaultValueFlowConf conf
10+
where conf.hasFlowPath(source, sink)
11+
select sink, source, sink, "$@", source, source.toString()
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
def taint x
2+
x
3+
end
4+
5+
def sink x
6+
puts "SINK: #{x}"
7+
end
8+
9+
def m1
10+
a = Array.new
11+
if rand() > 0 then
12+
a[0] = taint(1)
13+
else
14+
a = nil
15+
end
16+
sink(a[0]) # $ hasValueFlow=1
17+
end
18+
19+
m1
20+
21+
def m2
22+
a = Array.new
23+
if rand() > 0 then
24+
a[0] = taint(2)
25+
a.clear
26+
else
27+
a = nil
28+
end
29+
sink(a[0])
30+
end
31+
32+
m2

0 commit comments

Comments
 (0)