Skip to content

Commit 5703f63

Browse files
committed
Ruby: use InlineFlowTest in Summaries.ql test
1 parent b0b795d commit 5703f63

File tree

3 files changed

+36
-129
lines changed

3 files changed

+36
-129
lines changed

ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected

Lines changed: 22 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,27 @@
1-
edges
2-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:2:6:2:12 | tainted |
3-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:4:24:4:30 | tainted : |
4-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:16:36:16:42 | tainted : |
5-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:20:25:20:31 | tainted : |
6-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:26:31:26:37 | tainted : |
7-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:30:24:30:30 | tainted : |
8-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:31:27:31:33 | tainted : |
9-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:34:16:34:22 | tainted |
10-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:35:16:35:22 | tainted |
11-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:36:21:36:27 | tainted |
12-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:37:36:37:42 | tainted |
13-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:51:24:51:30 | tainted : |
14-
| summaries.rb:1:11:1:26 | call to identity : | summaries.rb:54:23:54:29 | tainted : |
15-
| summaries.rb:1:20:1:26 | "taint" : | summaries.rb:1:11:1:26 | call to identity : |
16-
| summaries.rb:4:12:7:3 | call to apply_block : | summaries.rb:9:6:9:13 | tainted2 |
17-
| summaries.rb:4:24:4:30 | tainted : | summaries.rb:4:12:7:3 | call to apply_block : |
18-
| summaries.rb:4:24:4:30 | tainted : | summaries.rb:4:36:4:36 | x : |
19-
| summaries.rb:4:36:4:36 | x : | summaries.rb:5:8:5:8 | x |
20-
| summaries.rb:11:17:11:17 | x : | summaries.rb:12:8:12:8 | x |
21-
| summaries.rb:16:12:16:43 | call to apply_lambda : | summaries.rb:18:6:18:13 | tainted3 |
22-
| summaries.rb:16:36:16:42 | tainted : | summaries.rb:11:17:11:17 | x : |
23-
| summaries.rb:16:36:16:42 | tainted : | summaries.rb:16:12:16:43 | call to apply_lambda : |
24-
| summaries.rb:20:12:20:32 | call to firstArg : | summaries.rb:21:6:21:13 | tainted4 |
25-
| summaries.rb:20:25:20:31 | tainted : | summaries.rb:20:12:20:32 | call to firstArg : |
26-
| summaries.rb:26:12:26:38 | call to secondArg : | summaries.rb:27:6:27:13 | tainted5 |
27-
| summaries.rb:26:31:26:37 | tainted : | summaries.rb:26:12:26:38 | call to secondArg : |
28-
| summaries.rb:30:24:30:30 | tainted : | summaries.rb:30:6:30:42 | call to onlyWithBlock |
29-
| summaries.rb:31:27:31:33 | tainted : | summaries.rb:31:6:31:34 | call to onlyWithoutBlock |
30-
| summaries.rb:40:7:40:13 | "taint" : | summaries.rb:41:24:41:24 | t : |
31-
| summaries.rb:40:7:40:13 | "taint" : | summaries.rb:42:24:42:24 | t : |
32-
| summaries.rb:40:7:40:13 | "taint" : | summaries.rb:44:8:44:8 | t : |
33-
| summaries.rb:41:24:41:24 | t : | summaries.rb:41:8:41:25 | call to matchedByName |
34-
| summaries.rb:42:24:42:24 | t : | summaries.rb:42:8:42:25 | call to matchedByName |
35-
| summaries.rb:44:8:44:8 | t : | summaries.rb:44:8:44:27 | call to matchedByNameRcv |
36-
| summaries.rb:48:24:48:30 | "taint" : | summaries.rb:48:8:48:31 | call to preserveTaint |
37-
| summaries.rb:51:24:51:30 | tainted : | summaries.rb:51:6:51:31 | call to namedArg |
38-
| summaries.rb:54:23:54:29 | tainted : | summaries.rb:54:40:54:40 | x : |
39-
| summaries.rb:54:40:54:40 | x : | summaries.rb:55:8:55:8 | x |
40-
| summaries.rb:62:24:62:30 | "taint" : | summaries.rb:62:8:62:31 | call to preserveTaint |
41-
| summaries.rb:65:26:65:32 | "taint" : | summaries.rb:65:8:65:33 | call to preserveTaint |
42-
nodes
43-
| summaries.rb:1:11:1:26 | call to identity : | semmle.label | call to identity : |
44-
| summaries.rb:1:20:1:26 | "taint" : | semmle.label | "taint" : |
45-
| summaries.rb:2:6:2:12 | tainted | semmle.label | tainted |
46-
| summaries.rb:4:12:7:3 | call to apply_block : | semmle.label | call to apply_block : |
47-
| summaries.rb:4:24:4:30 | tainted : | semmle.label | tainted : |
48-
| summaries.rb:4:36:4:36 | x : | semmle.label | x : |
49-
| summaries.rb:5:8:5:8 | x | semmle.label | x |
50-
| summaries.rb:9:6:9:13 | tainted2 | semmle.label | tainted2 |
51-
| summaries.rb:11:17:11:17 | x : | semmle.label | x : |
52-
| summaries.rb:12:8:12:8 | x | semmle.label | x |
53-
| summaries.rb:16:12:16:43 | call to apply_lambda : | semmle.label | call to apply_lambda : |
54-
| summaries.rb:16:36:16:42 | tainted : | semmle.label | tainted : |
55-
| summaries.rb:18:6:18:13 | tainted3 | semmle.label | tainted3 |
56-
| summaries.rb:20:12:20:32 | call to firstArg : | semmle.label | call to firstArg : |
57-
| summaries.rb:20:25:20:31 | tainted : | semmle.label | tainted : |
58-
| summaries.rb:21:6:21:13 | tainted4 | semmle.label | tainted4 |
59-
| summaries.rb:26:12:26:38 | call to secondArg : | semmle.label | call to secondArg : |
60-
| summaries.rb:26:31:26:37 | tainted : | semmle.label | tainted : |
61-
| summaries.rb:27:6:27:13 | tainted5 | semmle.label | tainted5 |
62-
| summaries.rb:30:6:30:42 | call to onlyWithBlock | semmle.label | call to onlyWithBlock |
63-
| summaries.rb:30:24:30:30 | tainted : | semmle.label | tainted : |
64-
| summaries.rb:31:6:31:34 | call to onlyWithoutBlock | semmle.label | call to onlyWithoutBlock |
65-
| summaries.rb:31:27:31:33 | tainted : | semmle.label | tainted : |
66-
| summaries.rb:34:16:34:22 | tainted | semmle.label | tainted |
67-
| summaries.rb:35:16:35:22 | tainted | semmle.label | tainted |
68-
| summaries.rb:36:21:36:27 | tainted | semmle.label | tainted |
69-
| summaries.rb:37:36:37:42 | tainted | semmle.label | tainted |
70-
| summaries.rb:40:7:40:13 | "taint" : | semmle.label | "taint" : |
71-
| summaries.rb:41:8:41:25 | call to matchedByName | semmle.label | call to matchedByName |
72-
| summaries.rb:41:24:41:24 | t : | semmle.label | t : |
73-
| summaries.rb:42:8:42:25 | call to matchedByName | semmle.label | call to matchedByName |
74-
| summaries.rb:42:24:42:24 | t : | semmle.label | t : |
75-
| summaries.rb:44:8:44:8 | t : | semmle.label | t : |
76-
| summaries.rb:44:8:44:27 | call to matchedByNameRcv | semmle.label | call to matchedByNameRcv |
77-
| summaries.rb:48:8:48:31 | call to preserveTaint | semmle.label | call to preserveTaint |
78-
| summaries.rb:48:24:48:30 | "taint" : | semmle.label | "taint" : |
79-
| summaries.rb:51:6:51:31 | call to namedArg | semmle.label | call to namedArg |
80-
| summaries.rb:51:24:51:30 | tainted : | semmle.label | tainted : |
81-
| summaries.rb:54:23:54:29 | tainted : | semmle.label | tainted : |
82-
| summaries.rb:54:40:54:40 | x : | semmle.label | x : |
83-
| summaries.rb:55:8:55:8 | x | semmle.label | x |
84-
| summaries.rb:62:8:62:31 | call to preserveTaint | semmle.label | call to preserveTaint |
85-
| summaries.rb:62:24:62:30 | "taint" : | semmle.label | "taint" : |
86-
| summaries.rb:65:8:65:33 | call to preserveTaint | semmle.label | call to preserveTaint |
87-
| summaries.rb:65:26:65:32 | "taint" : | semmle.label | "taint" : |
88-
subpaths
1+
failures
2+
| summaries.rb:2:6:2:12 | tainted | Unexpected result: hasValueFlow=tainted |
3+
| summaries.rb:5:8:5:8 | x | Unexpected result: hasValueFlow=tainted |
4+
| summaries.rb:9:6:9:13 | tainted2 | Unexpected result: hasValueFlow=tainted |
5+
| summaries.rb:12:8:12:8 | x | Unexpected result: hasValueFlow=tainted |
6+
| summaries.rb:18:6:18:13 | tainted3 | Unexpected result: hasValueFlow=tainted |
7+
| summaries.rb:21:6:21:13 | tainted4 | Unexpected result: hasTaintFlow=tainted |
8+
| summaries.rb:27:6:27:13 | tainted5 | Unexpected result: hasTaintFlow=tainted |
9+
| summaries.rb:30:6:30:42 | call to onlyWithBlock | Unexpected result: hasTaintFlow=tainted |
10+
| summaries.rb:31:6:31:34 | call to onlyWithoutBlock | Unexpected result: hasTaintFlow=tainted |
11+
| summaries.rb:34:16:34:22 | tainted | Unexpected result: hasValueFlow=tainted |
12+
| summaries.rb:35:16:35:22 | tainted | Unexpected result: hasValueFlow=tainted |
13+
| summaries.rb:36:21:36:27 | tainted | Unexpected result: hasValueFlow=tainted |
14+
| summaries.rb:37:36:37:42 | tainted | Unexpected result: hasValueFlow=tainted |
15+
| summaries.rb:41:8:41:25 | call to matchedByName | Unexpected result: hasTaintFlow=t |
16+
| summaries.rb:42:8:42:25 | call to matchedByName | Unexpected result: hasTaintFlow=t |
17+
| summaries.rb:44:8:44:27 | call to matchedByNameRcv | Unexpected result: hasTaintFlow=t |
18+
| summaries.rb:48:8:48:42 | call to preserveTaint | Unexpected result: hasTaintFlow=blockArg |
19+
| summaries.rb:51:6:51:31 | call to namedArg | Unexpected result: hasTaintFlow=tainted |
20+
| summaries.rb:55:8:55:8 | x | Unexpected result: hasTaintFlow=tainted |
21+
| summaries.rb:62:8:62:54 | call to preserveTaint | Unexpected result: hasTaintFlow=startInNamedCallback |
22+
| summaries.rb:65:8:65:57 | call to preserveTaint | Unexpected result: hasTaintFlow=startInNamedParameter |
8923
invalidSpecComponent
9024
invalidOutputSpecComponent
91-
#select
92-
| summaries.rb:2:6:2:12 | tainted | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:2:6:2:12 | tainted | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
93-
| summaries.rb:5:8:5:8 | x | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:5:8:5:8 | x | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
94-
| summaries.rb:9:6:9:13 | tainted2 | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:9:6:9:13 | tainted2 | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
95-
| summaries.rb:12:8:12:8 | x | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:12:8:12:8 | x | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
96-
| summaries.rb:18:6:18:13 | tainted3 | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:18:6:18:13 | tainted3 | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
97-
| summaries.rb:21:6:21:13 | tainted4 | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:21:6:21:13 | tainted4 | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
98-
| summaries.rb:27:6:27:13 | tainted5 | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:27:6:27:13 | tainted5 | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
99-
| summaries.rb:30:6:30:42 | call to onlyWithBlock | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:30:6:30:42 | call to onlyWithBlock | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
100-
| summaries.rb:31:6:31:34 | call to onlyWithoutBlock | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:31:6:31:34 | call to onlyWithoutBlock | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
101-
| summaries.rb:34:16:34:22 | tainted | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:34:16:34:22 | tainted | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
102-
| summaries.rb:35:16:35:22 | tainted | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:35:16:35:22 | tainted | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
103-
| summaries.rb:36:21:36:27 | tainted | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:36:21:36:27 | tainted | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
104-
| summaries.rb:37:36:37:42 | tainted | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:37:36:37:42 | tainted | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
105-
| summaries.rb:41:8:41:25 | call to matchedByName | summaries.rb:40:7:40:13 | "taint" : | summaries.rb:41:8:41:25 | call to matchedByName | $@ | summaries.rb:40:7:40:13 | "taint" : | "taint" : |
106-
| summaries.rb:42:8:42:25 | call to matchedByName | summaries.rb:40:7:40:13 | "taint" : | summaries.rb:42:8:42:25 | call to matchedByName | $@ | summaries.rb:40:7:40:13 | "taint" : | "taint" : |
107-
| summaries.rb:44:8:44:27 | call to matchedByNameRcv | summaries.rb:40:7:40:13 | "taint" : | summaries.rb:44:8:44:27 | call to matchedByNameRcv | $@ | summaries.rb:40:7:40:13 | "taint" : | "taint" : |
108-
| summaries.rb:48:8:48:31 | call to preserveTaint | summaries.rb:48:24:48:30 | "taint" : | summaries.rb:48:8:48:31 | call to preserveTaint | $@ | summaries.rb:48:24:48:30 | "taint" : | "taint" : |
109-
| summaries.rb:51:6:51:31 | call to namedArg | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:51:6:51:31 | call to namedArg | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
110-
| summaries.rb:55:8:55:8 | x | summaries.rb:1:20:1:26 | "taint" : | summaries.rb:55:8:55:8 | x | $@ | summaries.rb:1:20:1:26 | "taint" : | "taint" : |
111-
| summaries.rb:62:8:62:31 | call to preserveTaint | summaries.rb:62:24:62:30 | "taint" : | summaries.rb:62:8:62:31 | call to preserveTaint | $@ | summaries.rb:62:24:62:30 | "taint" : | "taint" : |
112-
| summaries.rb:65:8:65:33 | call to preserveTaint | summaries.rb:65:26:65:32 | "taint" : | summaries.rb:65:8:65:33 | call to preserveTaint | $@ | summaries.rb:65:26:65:32 | "taint" : | "taint" : |
11325
warning
11426
| CSV type row should have 5 columns but has 2: test;TooFewColumns |
11527
| CSV type row should have 5 columns but has 8: test;TooManyColumns;;;Member[Foo].Instance;too;many;columns |

ruby/ql/test/library-tests/dataflow/summaries/Summaries.ql

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
import ruby
66
import codeql.ruby.dataflow.FlowSummary
7-
import DataFlow::PathGraph
87
import codeql.ruby.TaintTracking
98
import codeql.ruby.dataflow.internal.FlowSummaryImpl
109
import codeql.ruby.dataflow.internal.AccessPathSyntax
1110
import codeql.ruby.frameworks.data.ModelsAsData
11+
import TestUtilities.InlineFlowTest
1212

1313
query predicate invalidSpecComponent(SummarizedCallable sc, string s, string c) {
1414
(sc.propagatesFlowExt(s, _, _) or sc.propagatesFlowExt(_, s, _)) and
@@ -117,23 +117,18 @@ private class SinkFromModel extends ModelInput::SinkModelCsv {
117117
override predicate row(string row) { row = "test;FooOrBar;Method[method].Argument[0];test-sink" }
118118
}
119119

120-
class Conf extends TaintTracking::Configuration {
121-
Conf() { this = "FlowSummaries" }
122-
123-
override predicate isSource(DataFlow::Node src) {
124-
src.asExpr().getExpr().(StringLiteral).getConstantValue().isString("taint")
120+
class CustomValueSink extends DefaultValueFlowConf {
121+
override predicate isSink(DataFlow::Node sink) {
122+
super.isSink(sink)
123+
or
124+
sink = ModelOutput::getASinkNode("test-sink").getARhs()
125125
}
126+
}
126127

128+
class CustomTaintSink extends DefaultTaintFlowConf {
127129
override predicate isSink(DataFlow::Node sink) {
128-
exists(MethodCall mc |
129-
mc.getMethodName() = "sink" and
130-
mc.getAnArgument() = sink.asExpr().getExpr()
131-
)
130+
super.isSink(sink)
132131
or
133132
sink = ModelOutput::getASinkNode("test-sink").getARhs()
134133
}
135134
}
136-
137-
from DataFlow::PathNode source, DataFlow::PathNode sink, Conf conf
138-
where conf.hasFlowPath(source, sink)
139-
select sink, source, sink, "$@", source, source.toString()

ruby/ql/test/library-tests/dataflow/summaries/summaries.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tainted = identity "taint"
1+
tainted = identity source("tainted")
22
sink tainted
33

44
tainted2 = apply_block tainted do |x|
@@ -37,15 +37,15 @@
3737
Bar.new.next.next.next.next.method(tainted)
3838

3939
def userDefinedFunction(x, y)
40-
t = "taint"
40+
t = source("t")
4141
sink(x.matchedByName(t))
4242
sink(y.matchedByName(t))
4343
sink(x.unmatchedName(t))
4444
sink(t.matchedByNameRcv())
4545
end
4646

4747
Foo.blockArg do |x|
48-
sink(x.preserveTaint("taint"))
48+
sink(x.preserveTaint(source("blockArg")))
4949
end
5050

5151
sink(Foo.namedArg(foo: tainted))
@@ -59,8 +59,8 @@ def userDefinedFunction(x, y)
5959
})
6060

6161
Foo.startInNamedCallback(foo: ->(x) {
62-
sink(x.preserveTaint("taint"))
62+
sink(x.preserveTaint(source("startInNamedCallback")))
6363
})
6464
Foo.startInNamedParameter(->(foo:) {
65-
sink(foo.preserveTaint("taint"))
65+
sink(foo.preserveTaint(source("startInNamedParameter")))
6666
})

0 commit comments

Comments
 (0)