Skip to content

Commit 4cdaccd

Browse files
committed
JS: Add InlineFlowTest
1 parent 4b8ae2a commit 4cdaccd

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* Inline flow tests for JavaScript.
3+
* See `shared/util/codeql/dataflow/test/InlineFlowTest.qll`
4+
*/
5+
6+
private import javascript
7+
private import semmle.javascript.Locations
8+
private import codeql.dataflow.test.InlineFlowTest
9+
private import semmle.javascript.dataflow.internal.sharedlib.DataFlowArg
10+
private import semmle.javascript.frameworks.data.internal.ApiGraphModelsExtensions as ApiGraphModelsExtensions
11+
private import internal.InlineExpectationsTestImpl
12+
13+
private module FlowTestImpl implements InputSig<Location, JSDataFlow> {
14+
import testUtilities.InlineFlowTestUtil
15+
16+
bindingset[src, sink]
17+
string getArgString(DataFlow::Node src, DataFlow::Node sink) {
18+
(if exists(getSourceArgString(src)) then result = getSourceArgString(src) else result = "") and
19+
exists(sink)
20+
}
21+
22+
predicate interpretModelForTest = ApiGraphModelsExtensions::interpretModelForTest/2;
23+
}
24+
25+
import InlineFlowTestMake<Location, JSDataFlow, JSTaintFlow, Impl, FlowTestImpl>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* Defines the default source and sink recognition for `InlineFlowTest.qll`.
3+
*
4+
* We reuse these predicates in some type-tracking tests that don't wish to bring in the
5+
* test configuration from `InlineFlowTest`.
6+
*/
7+
8+
private import javascript
9+
10+
predicate defaultSource(DataFlow::Node src) { src.(DataFlow::CallNode).getCalleeName() = "source" }
11+
12+
predicate defaultSink(DataFlow::Node sink) {
13+
exists(DataFlow::CallNode call | call.getCalleeName() = "sink" | sink = call.getAnArgument())
14+
}
15+
16+
bindingset[src]
17+
string getSourceArgString(DataFlow::Node src) {
18+
src.(DataFlow::CallNode).getAnArgument().getStringValue() = result
19+
or
20+
src.(DataFlow::ParameterNode).getName() = result
21+
}

0 commit comments

Comments
 (0)