Skip to content

Commit 167f5f3

Browse files
committed
JS: Port TaintBarriers test
1 parent 115bc86 commit 167f5f3

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

javascript/ql/test/library-tests/TaintBarriers/ExampleConfiguration.qll

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,14 @@ StringOps::ConcatenationRoot sinkConcatenation() {
66
result.getConstantStringParts().matches("<sink>%</sink>")
77
}
88

9-
class ExampleConfiguration extends TaintTracking::Configuration {
10-
ExampleConfiguration() { this = "ExampleConfiguration" }
11-
12-
override predicate isSource(DataFlow::Node source) {
9+
module TestConfig implements DataFlow::ConfigSig {
10+
predicate isSource(DataFlow::Node source) {
1311
source.asExpr().(CallExpr).getCalleeName() = "SOURCE"
1412
or
1513
source = sourceVariable()
1614
}
1715

18-
override predicate isSink(DataFlow::Node sink) {
16+
predicate isSink(DataFlow::Node sink) {
1917
exists(CallExpr callExpr |
2018
callExpr.getCalleeName() = "SINK" and
2119
DataFlow::valueNode(callExpr.getArgument(0)) = sink
@@ -24,19 +22,40 @@ class ExampleConfiguration extends TaintTracking::Configuration {
2422
sink = sinkConcatenation()
2523
}
2624

27-
override predicate isSanitizerIn(DataFlow::Node node) { node = sourceVariable() }
25+
predicate isBarrierIn(DataFlow::Node node) { node = sourceVariable() }
2826

29-
override predicate isSanitizerOut(DataFlow::Node node) { node = sinkConcatenation() }
27+
predicate isBarrierOut(DataFlow::Node node) { node = sinkConcatenation() }
3028

31-
override predicate isSanitizer(DataFlow::Node node) {
29+
additional predicate isBarrier1(DataFlow::Node node) {
3230
exists(CallExpr callExpr |
3331
callExpr.getCalleeName() = "SANITIZE" and
3432
DataFlow::valueNode(callExpr.getArgument(0)) = node
3533
)
3634
}
3735

36+
predicate isBarrier(DataFlow::Node node) {
37+
isBarrier1(node)
38+
or
39+
node = TaintTracking::AdHocWhitelistCheckSanitizer::getABarrierNode()
40+
}
41+
}
42+
43+
module TestFlow = TaintTracking::Global<TestConfig>;
44+
45+
class ExampleConfiguration extends TaintTracking::Configuration {
46+
ExampleConfiguration() { this = "ExampleConfiguration" }
47+
48+
override predicate isSource(DataFlow::Node source) { TestConfig::isSource(source) }
49+
50+
override predicate isSink(DataFlow::Node sink) { TestConfig::isSink(sink) }
51+
52+
override predicate isSanitizerIn(DataFlow::Node node) { TestConfig::isBarrierIn(node) }
53+
54+
override predicate isSanitizerOut(DataFlow::Node node) { TestConfig::isBarrierOut(node) }
55+
56+
override predicate isSanitizer(DataFlow::Node node) { TestConfig::isBarrier1(node) }
57+
3858
override predicate isSanitizerGuard(TaintTracking::SanitizerGuardNode guard) {
39-
// add additional generic sanitizers
4059
guard instanceof TaintTracking::AdHocWhitelistCheckSanitizer
4160
}
4261
}

javascript/ql/test/library-tests/TaintBarriers/tests.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
legacyDataFlowDifference
12
isBarrier
23
isLabeledBarrier
34
| ExampleConfiguration | tst.js:6:14:6:14 | v | taint |

javascript/ql/test/library-tests/TaintBarriers/tests.ql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,7 @@ query predicate sanitizingGuard(TaintTracking::SanitizerGuardNode g, Expr e, boo
1616
}
1717

1818
query predicate taintedSink(DataFlow::Node source, DataFlow::Node sink) {
19-
exists(ExampleConfiguration cfg | cfg.hasFlow(source, sink))
19+
TestFlow::flow(source, sink)
2020
}
21+
22+
import testUtilities.LegacyDataFlowDiff::DataFlowDiff<TestFlow, ExampleConfiguration>

0 commit comments

Comments
 (0)