Skip to content

Commit 28a2d05

Browse files
committed
InlineFlowTest: Allow for custom getArgString
1 parent 27be5ba commit 28a2d05

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

ruby/ql/test/TestUtilities/InlineFlowTest.qll

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ private import internal.InlineExpectationsTestImpl
1212
private module FlowTestImpl implements InputSig<RubyDataFlow> {
1313
import TestUtilities.InlineFlowTestUtil
1414

15+
bindingset[src, sink]
1516
string getArgString(DataFlow::Node src, DataFlow::Node sink) {
1617
(if exists(getSourceArgString(src)) then result = getSourceArgString(src) else result = "") and
1718
exists(sink)

shared/dataflow/codeql/dataflow/test/InlineFlowTest.qll

+24-3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ signature module InputSig<DF::InputSig DataFlowLang> {
3535

3636
predicate defaultSink(DataFlowLang::Node source);
3737

38+
bindingset[src, sink]
3839
string getArgString(DataFlowLang::Node src, DataFlowLang::Node sink);
3940
}
4041

@@ -62,7 +63,13 @@ module InlineFlowTestMake<
6263
predicate isSink(DataFlowLang::Node sink) { none() }
6364
}
6465

65-
module FlowTest<DataFlow::ConfigSig ValueFlowConfig, DataFlow::ConfigSig TaintFlowConfig> {
66+
bindingset[src, sink]
67+
signature string getArgStringSig(DataFlowLang::Node src, DataFlowLang::Node sink);
68+
69+
module FlowTestArgString<
70+
DataFlow::ConfigSig ValueFlowConfig, DataFlow::ConfigSig TaintFlowConfig,
71+
getArgStringSig/2 getArgString>
72+
{
6673
module ValueFlow = DataFlow::Global<ValueFlowConfig>;
6774

6875
module TaintFlow = TaintTracking::Global<TaintFlowConfig>;
@@ -82,7 +89,7 @@ module InlineFlowTestMake<
8289
exists(DataFlowLang::Node src, DataFlowLang::Node sink | ValueFlow::flow(src, sink) |
8390
hasLocationInfo(sink, location) and
8491
element = sink.toString() and
85-
value = Impl::getArgString(src, sink)
92+
value = getArgString(src, sink)
8693
)
8794
or
8895
tag = "hasTaintFlow" and
@@ -91,7 +98,7 @@ module InlineFlowTestMake<
9198
|
9299
hasLocationInfo(sink, location) and
93100
element = sink.toString() and
94-
value = Impl::getArgString(src, sink)
101+
value = getArgString(src, sink)
95102
)
96103
}
97104
}
@@ -105,12 +112,26 @@ module InlineFlowTestMake<
105112
}
106113
}
107114

115+
module FlowTest<DataFlow::ConfigSig ValueFlowConfig, DataFlow::ConfigSig TaintFlowConfig> {
116+
import FlowTestArgString<ValueFlowConfig, TaintFlowConfig, Impl::getArgString/2>
117+
}
118+
108119
module DefaultFlowTest = FlowTest<DefaultFlowConfig, DefaultFlowConfig>;
109120

121+
module ValueFlowTestArgString<DataFlow::ConfigSig ValueFlowConfig, getArgStringSig/2 getArgString>
122+
{
123+
import FlowTestArgString<ValueFlowConfig, NoFlowConfig, getArgString/2>
124+
}
125+
110126
module ValueFlowTest<DataFlow::ConfigSig ValueFlowConfig> {
111127
import FlowTest<ValueFlowConfig, NoFlowConfig>
112128
}
113129

130+
module TaintFlowTestArgString<DataFlow::ConfigSig TaintFlowConfig, getArgStringSig/2 getArgString>
131+
{
132+
import FlowTestArgString<NoFlowConfig, TaintFlowConfig, getArgString/2>
133+
}
134+
114135
module TaintFlowTest<DataFlow::ConfigSig TaintFlowConfig> {
115136
import FlowTest<NoFlowConfig, TaintFlowConfig>
116137
}

0 commit comments

Comments
 (0)