Skip to content

Commit fcb6553

Browse files
committed
JS: Add: Array.protype.findLast as taint step
1 parent ea90698 commit fcb6553

File tree

5 files changed

+166
-131
lines changed

5 files changed

+166
-131
lines changed

javascript/ql/lib/semmle/javascript/Arrays.qll

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -384,13 +384,16 @@ private module ArrayLibraries {
384384
}
385385

386386
/**
387-
* Gets a call to `Array.prototype.find` or a polyfill implementing the same functionality.
387+
* Gets a call to `Array.prototype.find` or `Array.prototype.findLast` or a polyfill implementing the same functionality.
388388
*/
389389
DataFlow::CallNode arrayFindCall(DataFlow::Node array) {
390-
result.(DataFlow::MethodCallNode).getMethodName() = "find" and
390+
result.(DataFlow::MethodCallNode).getMethodName() in ["find", "findLast"] and
391391
array = result.getReceiver()
392392
or
393-
result = DataFlow::moduleImport(["array.prototype.find", "array-find"]).getACall() and
393+
result =
394+
DataFlow::moduleImport([
395+
"array.prototype.find", "array-find", "array.prototype.findLast", "array-find-last"
396+
]).getACall() and
394397
array = result.getArgument(0)
395398
}
396399

javascript/ql/test/library-tests/Arrays/DataFlow.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
| arrays.js:2:16:2:23 | "source" | arrays.js:90:10:90:10 | x |
1515
| arrays.js:2:16:2:23 | "source" | arrays.js:93:8:93:17 | arr.at(-1) |
1616
| arrays.js:2:16:2:23 | "source" | arrays.js:109:8:109:24 | arr8_spread.pop() |
17+
| arrays.js:2:16:2:23 | "source" | arrays.js:111:8:111:33 | arr.fin ... llback) |
1718
| arrays.js:18:22:18:29 | "source" | arrays.js:18:50:18:50 | e |
1819
| arrays.js:22:15:22:22 | "source" | arrays.js:23:8:23:17 | arr2.pop() |
1920
| arrays.js:25:15:25:22 | "source" | arrays.js:26:8:26:17 | arr3.pop() |

javascript/ql/test/library-tests/Arrays/TaintFlow.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
| arrays.js:2:16:2:23 | "source" | arrays.js:90:10:90:10 | x |
1616
| arrays.js:2:16:2:23 | "source" | arrays.js:93:8:93:17 | arr.at(-1) |
1717
| arrays.js:2:16:2:23 | "source" | arrays.js:109:8:109:24 | arr8_spread.pop() |
18+
| arrays.js:2:16:2:23 | "source" | arrays.js:111:8:111:33 | arr.fin ... llback) |
1819
| arrays.js:18:22:18:29 | "source" | arrays.js:18:50:18:50 | e |
1920
| arrays.js:22:15:22:22 | "source" | arrays.js:23:8:23:17 | arr2.pop() |
2021
| arrays.js:25:15:25:22 | "source" | arrays.js:26:8:26:17 | arr3.pop() |

javascript/ql/test/library-tests/Arrays/arrays.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,5 @@
108108
arr8_spread = arr8_spread.toSpliced(0, 0, ...arr);
109109
sink(arr8_spread.pop()); // NOT OK
110110

111-
sink(arr.findLast(someCallback)); // NOT OK -- Should be flagged by the taint tracking rule, but it is not.
111+
sink(arr.findLast(someCallback)); // NOT OK
112112
});

0 commit comments

Comments
 (0)