Skip to content

Commit aaa8969

Browse files
committed
add sort-keys as a clone call
1 parent 8ccdd4f commit aaa8969

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
lgtm,codescanning
2+
* The dataflow libraries now model dataflow in the `sort-keys` and `camelcase-keys` library.
3+
Affected packages are
4+
[sort-keys](https://npmjs.com/package/sort-keys),
5+
[camelcase-keys](https://npmjs.com/package/camelcase-keys)

javascript/ql/src/semmle/javascript/Extend.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,8 @@ private import semmle.javascript.dataflow.internal.PreCallGraphStep
183183
private class CloneStep extends PreCallGraphStep {
184184
override predicate step(DataFlow::Node pred, DataFlow::Node succ) {
185185
exists(DataFlow::CallNode call |
186-
call = DataFlow::moduleImport(["clone", "fclone"]).getACall()
186+
// `camelcase-keys` isn't quite a cloning library. But it's pretty close.
187+
call = DataFlow::moduleImport(["clone", "fclone", "sort-keys", "camelcase-keys"]).getACall()
187188
or
188189
call = DataFlow::moduleMember("json-cycle", ["decycle", "retrocycle"]).getACall()
189190
|

javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/tst2.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,19 @@ app.get('/baz', function(req, res) {
7272
obj.p = p;
7373
var other = jc.retrocycle(jc.decycle(obj));
7474

75+
res.send(p); // NOT OK
76+
res.send(other.p); // NOT OK
77+
});
78+
79+
const sortKeys = require('sort-keys');
80+
81+
app.get('/baz', function(req, res) {
82+
let { p } = req.params;
83+
84+
var obj = {};
85+
obj.p = p;
86+
var other = sortKeys(obj);
87+
7588
res.send(p); // NOT OK
7689
res.send(other.p); // NOT OK
7790
});

0 commit comments

Comments
 (0)