Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f3c80c7

Browse files
committed
JS: Unify access paths for captured variables
1 parent e543097 commit f3c80c7

2 files changed

Lines changed: 12 additions & 2 deletions

File tree

javascript/ql/src/semmle/javascript/dataflow/internal/AccessPaths.qll

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,12 @@ private SsaVariable getARefinementOf(SsaVariable variable) {
5353
*/
5454
private newtype TAccessPath =
5555
MkSsaRoot(SsaVariable var) {
56-
not exists(getRefinedVariable(var))
56+
not exists(getRefinedVariable(var)) and
57+
not var.getSourceVariable().isCaptured()
58+
}
59+
or
60+
MkCapturedRoot(LocalVariable var) {
61+
var.isCaptured()
5762
}
5863
or
5964
MkThisRoot(Function function) { function.getThisBinder() = function } or
@@ -78,6 +83,12 @@ class AccessPath extends TAccessPath {
7883
result = getARefinementOf*(var).getAUseIn(bb)
7984
)
8085
or
86+
exists(Variable var |
87+
this = MkCapturedRoot(var) and
88+
result = var.getAnAccess() and
89+
result.getBasicBlock() = bb
90+
)
91+
or
8192
exists(ThisExpr this_ |
8293
this = MkThisRoot(this_.getBinder()) and
8394
result = this_ and

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
| callbacks.js:44:17:44:24 | source() | callbacks.js:41:10:41:10 | x |
1313
| callbacks.js:50:18:50:25 | source() | callbacks.js:30:29:30:29 | y |
1414
| callbacks.js:51:18:51:25 | source() | callbacks.js:30:29:30:29 | y |
15-
| captured-sanitizer.js:25:3:25:10 | source() | captured-sanitizer.js:13:12:13:12 | x |
1615
| captured-sanitizer.js:25:3:25:10 | source() | captured-sanitizer.js:15:10:15:10 | x |
1716
| closure.js:6:15:6:22 | source() | closure.js:8:8:8:31 | string. ... (taint) |
1817
| closure.js:6:15:6:22 | source() | closure.js:9:8:9:25 | string.trim(taint) |

0 commit comments

Comments
 (0)