add sort-keys as a clone call

This commit is contained in:
Erik Krogh Kristensen
2021-07-15 12:59:20 +02:00
parent 8ccdd4fb9f
commit aaa8969537
3 changed files with 20 additions and 1 deletions

View File

@@ -183,7 +183,8 @@ private import semmle.javascript.dataflow.internal.PreCallGraphStep
private class CloneStep extends PreCallGraphStep {
override predicate step(DataFlow::Node pred, DataFlow::Node succ) {
exists(DataFlow::CallNode call |
call = DataFlow::moduleImport(["clone", "fclone"]).getACall()
// `camelcase-keys` isn't quite a cloning library. But it's pretty close.
call = DataFlow::moduleImport(["clone", "fclone", "sort-keys", "camelcase-keys"]).getACall()
or
call = DataFlow::moduleMember("json-cycle", ["decycle", "retrocycle"]).getACall()
|

View File

@@ -72,6 +72,19 @@ app.get('/baz', function(req, res) {
obj.p = p;
var other = jc.retrocycle(jc.decycle(obj));
res.send(p); // NOT OK
res.send(other.p); // NOT OK
});
const sortKeys = require('sort-keys');
app.get('/baz', function(req, res) {
let { p } = req.params;
var obj = {};
obj.p = p;
var other = sortKeys(obj);
res.send(p); // NOT OK
res.send(other.p); // NOT OK
});