Skip to content

Commit 6344f83

Browse files
committed
JS: Add: tests for taint tracking in groupBy functions
1 parent 213ce22 commit 6344f83

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,10 @@ typeInferenceMismatch
246246
| tst.js:2:13:2:20 | source() | tst.js:70:10:70:18 | xReversed |
247247
| tst.js:2:13:2:20 | source() | tst.js:72:10:72:31 | Map.gro ... z => z) |
248248
| tst.js:2:13:2:20 | source() | tst.js:74:10:74:34 | Object. ... z => z) |
249+
| tst.js:2:13:2:20 | source() | tst.js:79:14:79:20 | grouped |
250+
| tst.js:75:22:75:29 | source() | tst.js:75:10:75:52 | Map.gro ... (item)) |
251+
| tst.js:82:23:82:30 | source() | tst.js:84:14:84:20 | grouped |
252+
| tst.js:87:22:87:29 | source() | tst.js:90:14:90:25 | taintedValue |
249253
| xml.js:5:18:5:25 | source() | xml.js:8:14:8:17 | text |
250254
| xml.js:12:17:12:24 | source() | xml.js:13:14:13:19 | result |
251255
| xml.js:23:18:23:25 | source() | xml.js:20:14:20:17 | attr |

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,28 @@ function test() {
7272
sink(Map.groupBy(x, z => z)); // NOT OK
7373
sink(Custom.groupBy(x, z => z)); // OK
7474
sink(Object.groupBy(x, z => z)); // NOT OK
75+
sink(Map.groupBy(source(), (item) => sink(item))); // NOT OK
76+
77+
{
78+
const grouped = Map.groupBy(x, (item) => sink(item)); // NOT OK -- Should be tainted, but it is not
79+
sink(grouped); // NOT OK
80+
}
81+
{
82+
const list = [source()];
83+
const grouped = Map.groupBy(list, (item) => sink(item)); // NOT OK -- Should be tainted, but it is not
84+
sink(grouped); // NOT OK
85+
}
86+
{
87+
const data = source();
88+
const result = Object.groupBy(data, item => item);
89+
const taintedValue = result[notDefined()];
90+
sink(taintedValue); // NOT OK
91+
}
92+
{
93+
const data = source();
94+
const map = Map.groupBy(data, item => item);
95+
const taintedValue = map.get(true);
96+
sink(taintedValue); // NOT OK -- Should be tainted, but it is not
97+
sink(map.get(true)); // NOT OK -- Should be tainted, but it is not
98+
}
7599
}

0 commit comments

Comments
 (0)