Skip to content

Commit 0496642

Browse files
committed
JS: Add test for captured flow into callback
1 parent 355cfaa commit 0496642

File tree

4 files changed

+13
-1
lines changed

4 files changed

+13
-1
lines changed

javascript/ql/src/semmle/javascript/dataflow/Configuration.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1291,7 +1291,9 @@ private predicate summarizedHigherOrderCall(
12911291
DataFlow::Node innerArg, DataFlow::SourceNode cbParm, PathSummary oldSummary
12921292
|
12931293
reachableFromInput(f, outer, arg, innerArg, cfg, oldSummary) and
1294-
not arg = DataFlow::capturedVariableNode(_) and // Only track actual parameter flow
1294+
// Only track actual parameter flow.
1295+
// Captured flow does not need to be summarized - it is handled by the local case in `higherOrderCall`.
1296+
not arg = DataFlow::capturedVariableNode(_) and
12951297
argumentPassing(outer, cb, f, cbParm) and
12961298
innerArg = inner.getArgument(j)
12971299
|

javascript/ql/test/library-tests/TaintTracking/BasicTaintTracking.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ typeInferenceMismatch
3131
| callbacks.js:44:17:44:24 | source() | callbacks.js:41:10:41:10 | x |
3232
| callbacks.js:50:18:50:25 | source() | callbacks.js:30:29:30:29 | y |
3333
| callbacks.js:51:18:51:25 | source() | callbacks.js:30:29:30:29 | y |
34+
| callbacks.js:53:23:53:30 | source() | callbacks.js:58:10:58:10 | x |
3435
| capture-flow.js:9:11:9:18 | source() | capture-flow.js:14:10:14:16 | outer() |
3536
| captured-sanitizer.js:25:3:25:10 | source() | captured-sanitizer.js:15:10:15:10 | x |
3637
| closure.js:6:15:6:22 | source() | closure.js:8:8:8:31 | string. ... (taint) |

javascript/ql/test/library-tests/TaintTracking/DataFlowTracking.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
| callbacks.js:44:17:44:24 | source() | callbacks.js:41:10:41:10 | x |
2323
| callbacks.js:50:18:50:25 | source() | callbacks.js:30:29:30:29 | y |
2424
| callbacks.js:51:18:51:25 | source() | callbacks.js:30:29:30:29 | y |
25+
| callbacks.js:53:23:53:30 | source() | callbacks.js:58:10:58:10 | x |
2526
| capture-flow.js:9:11:9:18 | source() | capture-flow.js:14:10:14:16 | outer() |
2627
| captured-sanitizer.js:25:3:25:10 | source() | captured-sanitizer.js:15:10:15:10 | x |
2728
| constructor-calls.js:4:18:4:25 | source() | constructor-calls.js:18:8:18:14 | c.taint |

javascript/ql/test/library-tests/TaintTracking/callbacks.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,12 @@ function test() {
4949

5050
middleCallback(source());
5151
middleCallback(source());
52+
53+
let capturedTaint = source();
54+
function helper2(cb) {
55+
cb(capturedTaint);
56+
}
57+
helper2(x => {
58+
sink(x); // NOT OK
59+
});
5260
}

0 commit comments

Comments
 (0)