Skip to content

Commit

Permalink
Merge pull request #17951 from Napalys/napalys/reverse-support
Browse files Browse the repository at this point in the history
JS: Added support for reverse function
  • Loading branch information
Napalys authored Nov 12, 2024
2 parents ba26281 + 42f7f73 commit 6266dab
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 13 deletions.
4 changes: 4 additions & 0 deletions javascript/ql/lib/change-notes/2024-11-11-reserve-support.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* Added taint-steps for `Array.prototype.reverse`
14 changes: 14 additions & 0 deletions javascript/ql/lib/semmle/javascript/Arrays.qll
Original file line number Diff line number Diff line change
Expand Up @@ -444,4 +444,18 @@ private module ArrayLibraries {
)
}
}

/**
* A taint propagating data flow edge arising from in-place array manipulation operations.
* The methods return the pointer to `this` array as well.
*/
private class ArrayInPlaceManipulationTaintStep extends TaintTracking::SharedTaintStep {
override predicate heapStep(DataFlow::Node pred, DataFlow::Node succ) {
exists(DataFlow::MethodCallNode call |
call.getMethodName() in ["sort", "reverse"] and
pred = call.getReceiver() and
succ = call
)
}
}
}
13 changes: 0 additions & 13 deletions javascript/ql/lib/semmle/javascript/dataflow/TaintTracking.qll
Original file line number Diff line number Diff line change
Expand Up @@ -869,19 +869,6 @@ module TaintTracking {
}
}

/**
* A taint propagating data flow edge arising from sorting.
*/
private class SortTaintStep extends SharedTaintStep {
override predicate heapStep(DataFlow::Node pred, DataFlow::Node succ) {
exists(DataFlow::MethodCallNode call |
call.getMethodName() = "sort" and
pred = call.getReceiver() and
succ = call
)
}
}

/**
* A taint step through an exception constructor, such as `x` to `new Error(x)`.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ typeInferenceMismatch
| tst.js:2:13:2:20 | source() | tst.js:48:10:48:22 | new Buffer(x) |
| tst.js:2:13:2:20 | source() | tst.js:51:10:51:31 | seriali ... ript(x) |
| tst.js:2:13:2:20 | source() | tst.js:54:14:54:19 | unsafe |
| tst.js:2:13:2:20 | source() | tst.js:61:10:61:20 | x.reverse() |
| xml.js:5:18:5:25 | source() | xml.js:8:14:8:17 | text |
| xml.js:12:17:12:24 | source() | xml.js:13:14:13:19 | result |
| xml.js:23:18:23:25 | source() | xml.js:20:14:20:17 | attr |
Expand Down
2 changes: 2 additions & 0 deletions javascript/ql/test/library-tests/TaintTracking/tst.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,6 @@ function test() {
}

tagged`foo ${"safe"} bar ${x} baz`;

sink(x.reverse()); // NOT OK
}

0 comments on commit 6266dab

Please sign in to comment.