Skip to content

Commit 8ad0273

Browse files
committed
Ruby: Add more barrier guards tests
1 parent 2d76c15 commit 8ad0273

File tree

3 files changed

+162
-0
lines changed

3 files changed

+162
-0
lines changed

ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,17 @@ edges
66
| barrier_flow.rb:8:9:8:17 | call to source | barrier_flow.rb:8:5:8:5 | x | provenance | |
77
| barrier_flow.rb:24:5:24:5 | x | barrier_flow.rb:26:10:26:10 | x | provenance | |
88
| barrier_flow.rb:24:9:24:17 | call to source | barrier_flow.rb:24:5:24:5 | x | provenance | |
9+
| barrier_flow.rb:82:5:82:5 | x | barrier_flow.rb:87:14:87:14 | x | provenance | |
10+
| barrier_flow.rb:82:5:82:5 | x | barrier_flow.rb:93:14:93:14 | x | provenance | |
11+
| barrier_flow.rb:82:5:82:5 | x | barrier_flow.rb:99:14:99:14 | x | provenance | |
12+
| barrier_flow.rb:82:5:82:5 | x | barrier_flow.rb:103:14:103:14 | x | provenance | |
13+
| barrier_flow.rb:82:5:82:5 | x | barrier_flow.rb:105:14:105:14 | x | provenance | |
14+
| barrier_flow.rb:82:9:82:18 | call to source | barrier_flow.rb:82:5:82:5 | x | provenance | |
15+
| barrier_flow.rb:110:5:110:5 | x | barrier_flow.rb:115:14:115:14 | x | provenance | |
16+
| barrier_flow.rb:110:5:110:5 | x | barrier_flow.rb:119:14:119:14 | x | provenance | |
17+
| barrier_flow.rb:110:5:110:5 | x | barrier_flow.rb:125:14:125:14 | x | provenance | |
18+
| barrier_flow.rb:110:5:110:5 | x | barrier_flow.rb:131:14:131:14 | x | provenance | |
19+
| barrier_flow.rb:110:9:110:18 | call to source | barrier_flow.rb:110:5:110:5 | x | provenance | |
920
nodes
1021
| barrier_flow.rb:2:5:2:5 | x | semmle.label | x |
1122
| barrier_flow.rb:2:9:2:17 | call to source | semmle.label | call to source |
@@ -16,9 +27,32 @@ nodes
1627
| barrier_flow.rb:24:5:24:5 | x | semmle.label | x |
1728
| barrier_flow.rb:24:9:24:17 | call to source | semmle.label | call to source |
1829
| barrier_flow.rb:26:10:26:10 | x | semmle.label | x |
30+
| barrier_flow.rb:82:5:82:5 | x | semmle.label | x |
31+
| barrier_flow.rb:82:9:82:18 | call to source | semmle.label | call to source |
32+
| barrier_flow.rb:87:14:87:14 | x | semmle.label | x |
33+
| barrier_flow.rb:93:14:93:14 | x | semmle.label | x |
34+
| barrier_flow.rb:99:14:99:14 | x | semmle.label | x |
35+
| barrier_flow.rb:103:14:103:14 | x | semmle.label | x |
36+
| barrier_flow.rb:105:14:105:14 | x | semmle.label | x |
37+
| barrier_flow.rb:110:5:110:5 | x | semmle.label | x |
38+
| barrier_flow.rb:110:9:110:18 | call to source | semmle.label | call to source |
39+
| barrier_flow.rb:115:14:115:14 | x | semmle.label | x |
40+
| barrier_flow.rb:119:14:119:14 | x | semmle.label | x |
41+
| barrier_flow.rb:125:14:125:14 | x | semmle.label | x |
42+
| barrier_flow.rb:131:14:131:14 | x | semmle.label | x |
1943
subpaths
2044
testFailures
45+
| barrier_flow.rb:105:14:105:14 | x | Unexpected result: hasValueFlow=10 |
2146
#select
2247
| barrier_flow.rb:4:10:4:10 | x | barrier_flow.rb:2:9:2:17 | call to source | barrier_flow.rb:4:10:4:10 | x | $@ | barrier_flow.rb:2:9:2:17 | call to source | call to source |
2348
| barrier_flow.rb:11:14:11:14 | x | barrier_flow.rb:8:9:8:17 | call to source | barrier_flow.rb:11:14:11:14 | x | $@ | barrier_flow.rb:8:9:8:17 | call to source | call to source |
2449
| barrier_flow.rb:26:10:26:10 | x | barrier_flow.rb:24:9:24:17 | call to source | barrier_flow.rb:26:10:26:10 | x | $@ | barrier_flow.rb:24:9:24:17 | call to source | call to source |
50+
| barrier_flow.rb:87:14:87:14 | x | barrier_flow.rb:82:9:82:18 | call to source | barrier_flow.rb:87:14:87:14 | x | $@ | barrier_flow.rb:82:9:82:18 | call to source | call to source |
51+
| barrier_flow.rb:93:14:93:14 | x | barrier_flow.rb:82:9:82:18 | call to source | barrier_flow.rb:93:14:93:14 | x | $@ | barrier_flow.rb:82:9:82:18 | call to source | call to source |
52+
| barrier_flow.rb:99:14:99:14 | x | barrier_flow.rb:82:9:82:18 | call to source | barrier_flow.rb:99:14:99:14 | x | $@ | barrier_flow.rb:82:9:82:18 | call to source | call to source |
53+
| barrier_flow.rb:103:14:103:14 | x | barrier_flow.rb:82:9:82:18 | call to source | barrier_flow.rb:103:14:103:14 | x | $@ | barrier_flow.rb:82:9:82:18 | call to source | call to source |
54+
| barrier_flow.rb:105:14:105:14 | x | barrier_flow.rb:82:9:82:18 | call to source | barrier_flow.rb:105:14:105:14 | x | $@ | barrier_flow.rb:82:9:82:18 | call to source | call to source |
55+
| barrier_flow.rb:115:14:115:14 | x | barrier_flow.rb:110:9:110:18 | call to source | barrier_flow.rb:115:14:115:14 | x | $@ | barrier_flow.rb:110:9:110:18 | call to source | call to source |
56+
| barrier_flow.rb:119:14:119:14 | x | barrier_flow.rb:110:9:110:18 | call to source | barrier_flow.rb:119:14:119:14 | x | $@ | barrier_flow.rb:110:9:110:18 | call to source | call to source |
57+
| barrier_flow.rb:125:14:125:14 | x | barrier_flow.rb:110:9:110:18 | call to source | barrier_flow.rb:125:14:125:14 | x | $@ | barrier_flow.rb:110:9:110:18 | call to source | call to source |
58+
| barrier_flow.rb:131:14:131:14 | x | barrier_flow.rb:110:9:110:18 | call to source | barrier_flow.rb:131:14:131:14 | x | $@ | barrier_flow.rb:110:9:110:18 | call to source | call to source |

ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
testFailures
2+
| barrier_flow.rb:105:16:105:26 | # $ guarded | Missing result:guarded= |
23
failures
34
newStyleBarrierGuards
45
| barrier-guards.rb:3:16:4:19 | [input] SSA phi read(foo) |
@@ -46,6 +47,21 @@ newStyleBarrierGuards
4647
| barrier_flow.rb:58:5:59:34 | [input] SSA phi read(x) |
4748
| barrier_flow.rb:68:10:71:11 | [input] SSA phi read(x) |
4849
| barrier_flow.rb:72:5:75:11 | [input] SSA phi read(x) |
50+
| barrier_flow.rb:84:24:84:24 | x |
51+
| barrier_flow.rb:84:24:84:34 | [input] SSA phi read(x) |
52+
| barrier_flow.rb:84:36:85:26 | [input] SSA phi read(x) |
53+
| barrier_flow.rb:85:14:85:14 | x |
54+
| barrier_flow.rb:91:14:91:14 | x |
55+
| barrier_flow.rb:96:24:96:24 | x |
56+
| barrier_flow.rb:97:14:97:14 | x |
57+
| barrier_flow.rb:112:8:112:19 | [input] SSA phi read(x) |
58+
| barrier_flow.rb:112:24:112:35 | [input] SSA phi read(x) |
59+
| barrier_flow.rb:113:14:113:14 | x |
60+
| barrier_flow.rb:118:23:118:23 | x |
61+
| barrier_flow.rb:121:14:121:14 | x |
62+
| barrier_flow.rb:127:14:127:14 | x |
63+
| barrier_flow.rb:130:23:130:23 | x |
64+
| barrier_flow.rb:133:14:133:14 | x |
4965
controls
5066
| barrier-guards.rb:3:4:3:15 | ... == ... | barrier-guards.rb:4:5:4:7 | foo | true |
5167
| barrier-guards.rb:3:4:3:15 | ... == ... | barrier-guards.rb:6:5:6:7 | foo | false |
@@ -367,3 +383,59 @@ controls
367383
| barrier_flow.rb:69:12:69:23 | ... != ... | barrier_flow.rb:70:13:70:18 | return | true |
368384
| barrier_flow.rb:73:12:73:23 | ... != ... | barrier_flow.rb:73:9:75:11 | if ... | false |
369385
| barrier_flow.rb:73:12:73:23 | ... != ... | barrier_flow.rb:74:13:74:18 | return | true |
386+
| barrier_flow.rb:84:8:84:18 | ... == ... | barrier_flow.rb:84:8:84:34 | [true] ... and ... | true |
387+
| barrier_flow.rb:84:8:84:18 | ... == ... | barrier_flow.rb:84:24:84:24 | x | true |
388+
| barrier_flow.rb:84:8:84:18 | ... == ... | barrier_flow.rb:85:9:85:14 | self | true |
389+
| barrier_flow.rb:84:8:84:34 | [false] ... and ... | barrier_flow.rb:87:9:87:14 | self | false |
390+
| barrier_flow.rb:84:8:84:34 | [true] ... and ... | barrier_flow.rb:85:9:85:14 | self | true |
391+
| barrier_flow.rb:84:24:84:34 | ... == ... | barrier_flow.rb:84:8:84:34 | [true] ... and ... | true |
392+
| barrier_flow.rb:84:24:84:34 | ... == ... | barrier_flow.rb:85:9:85:14 | self | true |
393+
| barrier_flow.rb:90:8:90:18 | ... != ... | barrier_flow.rb:90:8:90:35 | [true] ... and ... | true |
394+
| barrier_flow.rb:90:8:90:18 | ... != ... | barrier_flow.rb:90:24:90:24 | x | true |
395+
| barrier_flow.rb:90:8:90:18 | ... != ... | barrier_flow.rb:91:9:91:14 | self | true |
396+
| barrier_flow.rb:90:8:90:35 | [false] ... and ... | barrier_flow.rb:93:9:93:14 | self | false |
397+
| barrier_flow.rb:90:8:90:35 | [true] ... and ... | barrier_flow.rb:91:9:91:14 | self | true |
398+
| barrier_flow.rb:90:24:90:35 | ... == ... | barrier_flow.rb:90:8:90:35 | [true] ... and ... | true |
399+
| barrier_flow.rb:90:24:90:35 | ... == ... | barrier_flow.rb:91:9:91:14 | self | true |
400+
| barrier_flow.rb:96:8:96:18 | ... == ... | barrier_flow.rb:96:8:96:35 | [true] ... and ... | true |
401+
| barrier_flow.rb:96:8:96:18 | ... == ... | barrier_flow.rb:96:24:96:24 | x | true |
402+
| barrier_flow.rb:96:8:96:18 | ... == ... | barrier_flow.rb:97:9:97:14 | self | true |
403+
| barrier_flow.rb:96:8:96:35 | [false] ... and ... | barrier_flow.rb:99:9:99:14 | self | false |
404+
| barrier_flow.rb:96:8:96:35 | [true] ... and ... | barrier_flow.rb:97:9:97:14 | self | true |
405+
| barrier_flow.rb:96:24:96:35 | ... != ... | barrier_flow.rb:96:8:96:35 | [true] ... and ... | true |
406+
| barrier_flow.rb:96:24:96:35 | ... != ... | barrier_flow.rb:97:9:97:14 | self | true |
407+
| barrier_flow.rb:102:8:102:19 | ... != ... | barrier_flow.rb:102:8:102:36 | [true] ... and ... | true |
408+
| barrier_flow.rb:102:8:102:19 | ... != ... | barrier_flow.rb:102:25:102:25 | x | true |
409+
| barrier_flow.rb:102:8:102:19 | ... != ... | barrier_flow.rb:103:9:103:14 | self | true |
410+
| barrier_flow.rb:102:8:102:36 | [false] ... and ... | barrier_flow.rb:105:9:105:14 | self | false |
411+
| barrier_flow.rb:102:8:102:36 | [true] ... and ... | barrier_flow.rb:103:9:103:14 | self | true |
412+
| barrier_flow.rb:102:25:102:36 | ... != ... | barrier_flow.rb:102:8:102:36 | [true] ... and ... | true |
413+
| barrier_flow.rb:102:25:102:36 | ... != ... | barrier_flow.rb:103:9:103:14 | self | true |
414+
| barrier_flow.rb:112:8:112:19 | ... == ... | barrier_flow.rb:112:8:112:35 | [false] ... or ... | false |
415+
| barrier_flow.rb:112:8:112:19 | ... == ... | barrier_flow.rb:112:24:112:24 | x | false |
416+
| barrier_flow.rb:112:8:112:19 | ... == ... | barrier_flow.rb:115:9:115:14 | self | false |
417+
| barrier_flow.rb:112:8:112:35 | [false] ... or ... | barrier_flow.rb:115:9:115:14 | self | false |
418+
| barrier_flow.rb:112:8:112:35 | [true] ... or ... | barrier_flow.rb:113:9:113:14 | self | true |
419+
| barrier_flow.rb:112:24:112:35 | ... == ... | barrier_flow.rb:112:8:112:35 | [false] ... or ... | false |
420+
| barrier_flow.rb:112:24:112:35 | ... == ... | barrier_flow.rb:115:9:115:14 | self | false |
421+
| barrier_flow.rb:118:8:118:18 | ... != ... | barrier_flow.rb:118:8:118:34 | [false] ... or ... | false |
422+
| barrier_flow.rb:118:8:118:18 | ... != ... | barrier_flow.rb:118:23:118:23 | x | false |
423+
| barrier_flow.rb:118:8:118:18 | ... != ... | barrier_flow.rb:121:9:121:14 | self | false |
424+
| barrier_flow.rb:118:8:118:34 | [false] ... or ... | barrier_flow.rb:121:9:121:14 | self | false |
425+
| barrier_flow.rb:118:8:118:34 | [true] ... or ... | barrier_flow.rb:119:9:119:14 | self | true |
426+
| barrier_flow.rb:118:23:118:34 | ... == ... | barrier_flow.rb:118:8:118:34 | [false] ... or ... | false |
427+
| barrier_flow.rb:118:23:118:34 | ... == ... | barrier_flow.rb:121:9:121:14 | self | false |
428+
| barrier_flow.rb:124:8:124:18 | ... == ... | barrier_flow.rb:124:8:124:34 | [false] ... or ... | false |
429+
| barrier_flow.rb:124:8:124:18 | ... == ... | barrier_flow.rb:124:23:124:23 | x | false |
430+
| barrier_flow.rb:124:8:124:18 | ... == ... | barrier_flow.rb:127:9:127:14 | self | false |
431+
| barrier_flow.rb:124:8:124:34 | [false] ... or ... | barrier_flow.rb:127:9:127:14 | self | false |
432+
| barrier_flow.rb:124:8:124:34 | [true] ... or ... | barrier_flow.rb:125:9:125:14 | self | true |
433+
| barrier_flow.rb:124:23:124:34 | ... != ... | barrier_flow.rb:124:8:124:34 | [false] ... or ... | false |
434+
| barrier_flow.rb:124:23:124:34 | ... != ... | barrier_flow.rb:127:9:127:14 | self | false |
435+
| barrier_flow.rb:130:8:130:18 | ... != ... | barrier_flow.rb:130:8:130:33 | [false] ... or ... | false |
436+
| barrier_flow.rb:130:8:130:18 | ... != ... | barrier_flow.rb:130:23:130:23 | x | false |
437+
| barrier_flow.rb:130:8:130:18 | ... != ... | barrier_flow.rb:133:9:133:14 | self | false |
438+
| barrier_flow.rb:130:8:130:33 | [false] ... or ... | barrier_flow.rb:133:9:133:14 | self | false |
439+
| barrier_flow.rb:130:8:130:33 | [true] ... or ... | barrier_flow.rb:131:9:131:14 | self | true |
440+
| barrier_flow.rb:130:23:130:33 | ... != ... | barrier_flow.rb:130:8:130:33 | [false] ... or ... | false |
441+
| barrier_flow.rb:130:23:130:33 | ... != ... | barrier_flow.rb:133:9:133:14 | self | false |

ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,59 @@ def m9(b)
7777

7878
sink x
7979
end
80+
81+
def m10
82+
x = source(10)
83+
84+
if x == "safe" and x == "safe" then # $ guarded
85+
sink x # $ guarded
86+
else
87+
sink x # $ hasValueFlow=10
88+
end
89+
90+
if x != "safe" and x == "safe2" then
91+
sink x # $ guarded
92+
else
93+
sink x # $ hasValueFlow=10
94+
end
95+
96+
if x == "safe" and x != "safe2" then # $ guarded
97+
sink x # $ guarded
98+
else
99+
sink x # $ hasValueFlow=10
100+
end
101+
102+
if x != "safe1" and x != "safe2" then
103+
sink x # $ hasValueFlow=10
104+
else
105+
sink x # $ guarded
106+
end
107+
end
108+
109+
def m11
110+
x = source(11)
111+
112+
if x == "safe1" or x == "safe2" then
113+
sink x # $ guarded
114+
else
115+
sink x # $ hasValueFlow=11
116+
end
117+
118+
if x != "safe" or x == "safe2" then # $ guarded
119+
sink x # $ hasValueFlow=11
120+
else
121+
sink x # $ guarded
122+
end
123+
124+
if x == "safe" or x != "safe2" then
125+
sink x # $ hasValueFlow=11
126+
else
127+
sink x # $ guarded
128+
end
129+
130+
if x != "safe" or x != "safe" then # $ guarded
131+
sink x # $ hasValueFlow=11
132+
else
133+
sink x # $ guarded
134+
end
135+
end

0 commit comments

Comments
 (0)