Skip to content

Commit fea1e47

Browse files
committed
Ruby: Add data-flow test for spurious flow through a reverse store
1 parent df2b586 commit fea1e47

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

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

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3367,6 +3367,10 @@ edges
33673367
| array_flow.rb:1605:10:1605:10 | c [element] : | array_flow.rb:1605:10:1605:13 | ...[...] |
33683368
| array_flow.rb:1610:5:1610:5 | [post] a [element, element 0] : | array_flow.rb:1611:10:1611:10 | a [element, element 0] : |
33693369
| array_flow.rb:1610:5:1610:5 | [post] a [element, element 0] : | array_flow.rb:1611:10:1611:10 | a [element, element 0] : |
3370+
| array_flow.rb:1610:5:1610:5 | [post] a [element, element 0] : | array_flow.rb:1614:10:1614:10 | a [element, element 0] : |
3371+
| array_flow.rb:1610:5:1610:5 | [post] a [element, element 0] : | array_flow.rb:1614:10:1614:10 | a [element, element 0] : |
3372+
| array_flow.rb:1610:5:1610:5 | [post] a [element, element 0] : | array_flow.rb:1615:10:1615:10 | a [element, element 0] : |
3373+
| array_flow.rb:1610:5:1610:5 | [post] a [element, element 0] : | array_flow.rb:1615:10:1615:10 | a [element, element 0] : |
33703374
| array_flow.rb:1610:5:1610:8 | [post] ...[...] [element 0] : | array_flow.rb:1610:5:1610:5 | [post] a [element, element 0] : |
33713375
| array_flow.rb:1610:5:1610:8 | [post] ...[...] [element 0] : | array_flow.rb:1610:5:1610:5 | [post] a [element, element 0] : |
33723376
| array_flow.rb:1610:15:1610:27 | call to source : | array_flow.rb:1610:5:1610:8 | [post] ...[...] [element 0] : |
@@ -3375,6 +3379,28 @@ edges
33753379
| array_flow.rb:1611:10:1611:10 | a [element, element 0] : | array_flow.rb:1611:10:1611:13 | ...[...] [element 0] : |
33763380
| array_flow.rb:1611:10:1611:13 | ...[...] [element 0] : | array_flow.rb:1611:10:1611:16 | ...[...] |
33773381
| array_flow.rb:1611:10:1611:13 | ...[...] [element 0] : | array_flow.rb:1611:10:1611:16 | ...[...] |
3382+
| array_flow.rb:1613:5:1613:5 | [post] a [element 1, element 0] : | array_flow.rb:1614:10:1614:10 | a [element 1, element 0] : |
3383+
| array_flow.rb:1613:5:1613:5 | [post] a [element 1, element 0] : | array_flow.rb:1614:10:1614:10 | a [element 1, element 0] : |
3384+
| array_flow.rb:1613:5:1613:5 | [post] a [element, element 0] : | array_flow.rb:1614:10:1614:10 | a [element, element 0] : |
3385+
| array_flow.rb:1613:5:1613:5 | [post] a [element, element 0] : | array_flow.rb:1614:10:1614:10 | a [element, element 0] : |
3386+
| array_flow.rb:1613:5:1613:5 | [post] a [element, element 0] : | array_flow.rb:1615:10:1615:10 | a [element, element 0] : |
3387+
| array_flow.rb:1613:5:1613:5 | [post] a [element, element 0] : | array_flow.rb:1615:10:1615:10 | a [element, element 0] : |
3388+
| array_flow.rb:1613:5:1613:8 | [post] ...[...] [element 0] : | array_flow.rb:1613:5:1613:5 | [post] a [element 1, element 0] : |
3389+
| array_flow.rb:1613:5:1613:8 | [post] ...[...] [element 0] : | array_flow.rb:1613:5:1613:5 | [post] a [element 1, element 0] : |
3390+
| array_flow.rb:1613:5:1613:8 | [post] ...[...] [element 0] : | array_flow.rb:1613:5:1613:5 | [post] a [element, element 0] : |
3391+
| array_flow.rb:1613:5:1613:8 | [post] ...[...] [element 0] : | array_flow.rb:1613:5:1613:5 | [post] a [element, element 0] : |
3392+
| array_flow.rb:1613:15:1613:27 | call to source : | array_flow.rb:1613:5:1613:8 | [post] ...[...] [element 0] : |
3393+
| array_flow.rb:1613:15:1613:27 | call to source : | array_flow.rb:1613:5:1613:8 | [post] ...[...] [element 0] : |
3394+
| array_flow.rb:1614:10:1614:10 | a [element 1, element 0] : | array_flow.rb:1614:10:1614:13 | ...[...] [element 0] : |
3395+
| array_flow.rb:1614:10:1614:10 | a [element 1, element 0] : | array_flow.rb:1614:10:1614:13 | ...[...] [element 0] : |
3396+
| array_flow.rb:1614:10:1614:10 | a [element, element 0] : | array_flow.rb:1614:10:1614:13 | ...[...] [element 0] : |
3397+
| array_flow.rb:1614:10:1614:10 | a [element, element 0] : | array_flow.rb:1614:10:1614:13 | ...[...] [element 0] : |
3398+
| array_flow.rb:1614:10:1614:13 | ...[...] [element 0] : | array_flow.rb:1614:10:1614:16 | ...[...] |
3399+
| array_flow.rb:1614:10:1614:13 | ...[...] [element 0] : | array_flow.rb:1614:10:1614:16 | ...[...] |
3400+
| array_flow.rb:1615:10:1615:10 | a [element, element 0] : | array_flow.rb:1615:10:1615:13 | ...[...] [element 0] : |
3401+
| array_flow.rb:1615:10:1615:10 | a [element, element 0] : | array_flow.rb:1615:10:1615:13 | ...[...] [element 0] : |
3402+
| array_flow.rb:1615:10:1615:13 | ...[...] [element 0] : | array_flow.rb:1615:10:1615:16 | ...[...] |
3403+
| array_flow.rb:1615:10:1615:13 | ...[...] [element 0] : | array_flow.rb:1615:10:1615:16 | ...[...] |
33783404
nodes
33793405
| array_flow.rb:2:9:2:20 | * ... [element 0] : | semmle.label | * ... [element 0] : |
33803406
| array_flow.rb:2:9:2:20 | * ... [element 0] : | semmle.label | * ... [element 0] : |
@@ -7010,6 +7036,28 @@ nodes
70107036
| array_flow.rb:1611:10:1611:13 | ...[...] [element 0] : | semmle.label | ...[...] [element 0] : |
70117037
| array_flow.rb:1611:10:1611:16 | ...[...] | semmle.label | ...[...] |
70127038
| array_flow.rb:1611:10:1611:16 | ...[...] | semmle.label | ...[...] |
7039+
| array_flow.rb:1613:5:1613:5 | [post] a [element 1, element 0] : | semmle.label | [post] a [element 1, element 0] : |
7040+
| array_flow.rb:1613:5:1613:5 | [post] a [element 1, element 0] : | semmle.label | [post] a [element 1, element 0] : |
7041+
| array_flow.rb:1613:5:1613:5 | [post] a [element, element 0] : | semmle.label | [post] a [element, element 0] : |
7042+
| array_flow.rb:1613:5:1613:5 | [post] a [element, element 0] : | semmle.label | [post] a [element, element 0] : |
7043+
| array_flow.rb:1613:5:1613:8 | [post] ...[...] [element 0] : | semmle.label | [post] ...[...] [element 0] : |
7044+
| array_flow.rb:1613:5:1613:8 | [post] ...[...] [element 0] : | semmle.label | [post] ...[...] [element 0] : |
7045+
| array_flow.rb:1613:15:1613:27 | call to source : | semmle.label | call to source : |
7046+
| array_flow.rb:1613:15:1613:27 | call to source : | semmle.label | call to source : |
7047+
| array_flow.rb:1614:10:1614:10 | a [element 1, element 0] : | semmle.label | a [element 1, element 0] : |
7048+
| array_flow.rb:1614:10:1614:10 | a [element 1, element 0] : | semmle.label | a [element 1, element 0] : |
7049+
| array_flow.rb:1614:10:1614:10 | a [element, element 0] : | semmle.label | a [element, element 0] : |
7050+
| array_flow.rb:1614:10:1614:10 | a [element, element 0] : | semmle.label | a [element, element 0] : |
7051+
| array_flow.rb:1614:10:1614:13 | ...[...] [element 0] : | semmle.label | ...[...] [element 0] : |
7052+
| array_flow.rb:1614:10:1614:13 | ...[...] [element 0] : | semmle.label | ...[...] [element 0] : |
7053+
| array_flow.rb:1614:10:1614:16 | ...[...] | semmle.label | ...[...] |
7054+
| array_flow.rb:1614:10:1614:16 | ...[...] | semmle.label | ...[...] |
7055+
| array_flow.rb:1615:10:1615:10 | a [element, element 0] : | semmle.label | a [element, element 0] : |
7056+
| array_flow.rb:1615:10:1615:10 | a [element, element 0] : | semmle.label | a [element, element 0] : |
7057+
| array_flow.rb:1615:10:1615:13 | ...[...] [element 0] : | semmle.label | ...[...] [element 0] : |
7058+
| array_flow.rb:1615:10:1615:13 | ...[...] [element 0] : | semmle.label | ...[...] [element 0] : |
7059+
| array_flow.rb:1615:10:1615:16 | ...[...] | semmle.label | ...[...] |
7060+
| array_flow.rb:1615:10:1615:16 | ...[...] | semmle.label | ...[...] |
70137061
subpaths
70147062
#select
70157063
| array_flow.rb:3:10:3:13 | ...[...] | array_flow.rb:2:10:2:20 | call to source : | array_flow.rb:3:10:3:13 | ...[...] | $@ | array_flow.rb:2:10:2:20 | call to source : | call to source : |
@@ -7694,3 +7742,7 @@ subpaths
76947742
| array_flow.rb:1605:10:1605:13 | ...[...] | array_flow.rb:1600:16:1600:28 | call to source : | array_flow.rb:1605:10:1605:13 | ...[...] | $@ | array_flow.rb:1600:16:1600:28 | call to source : | call to source : |
76957743
| array_flow.rb:1605:10:1605:13 | ...[...] | array_flow.rb:1601:13:1601:25 | call to source : | array_flow.rb:1605:10:1605:13 | ...[...] | $@ | array_flow.rb:1601:13:1601:25 | call to source : | call to source : |
76967744
| array_flow.rb:1611:10:1611:16 | ...[...] | array_flow.rb:1610:15:1610:27 | call to source : | array_flow.rb:1611:10:1611:16 | ...[...] | $@ | array_flow.rb:1610:15:1610:27 | call to source : | call to source : |
7745+
| array_flow.rb:1614:10:1614:16 | ...[...] | array_flow.rb:1610:15:1610:27 | call to source : | array_flow.rb:1614:10:1614:16 | ...[...] | $@ | array_flow.rb:1610:15:1610:27 | call to source : | call to source : |
7746+
| array_flow.rb:1614:10:1614:16 | ...[...] | array_flow.rb:1613:15:1613:27 | call to source : | array_flow.rb:1614:10:1614:16 | ...[...] | $@ | array_flow.rb:1613:15:1613:27 | call to source : | call to source : |
7747+
| array_flow.rb:1615:10:1615:16 | ...[...] | array_flow.rb:1610:15:1610:27 | call to source : | array_flow.rb:1615:10:1615:16 | ...[...] | $@ | array_flow.rb:1610:15:1610:27 | call to source : | call to source : |
7748+
| array_flow.rb:1615:10:1615:16 | ...[...] | array_flow.rb:1613:15:1613:27 | call to source : | array_flow.rb:1615:10:1615:16 | ...[...] | $@ | array_flow.rb:1613:15:1613:27 | call to source : | call to source : |

ruby/ql/test/library-tests/dataflow/array-flow/array_flow.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1610,4 +1610,7 @@ def m136(i)
16101610
a[i][0] = source(136.1)
16111611
sink(a[0][0]) # $ hasValueFlow=136.1
16121612
sink(a[0][1])
1613+
a[1][0] = source(136.2)
1614+
sink(a[1][0]) # $ hasValueFlow=136.2 $ SPURIOUS hasValueFlow=136.1
1615+
sink(a[2][0]) # $ hasValueFlow=136.1 $ SPURIOUS hasValueFlow=136.2
16131616
end

0 commit comments

Comments
 (0)