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

Skip to content

Commit cb54618

Browse files
author
Max Schaefer
committed
JavaScript: Deal with (un-)escaping on captured variables.
1 parent 61aa075 commit cb54618

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

javascript/ql/src/Security/CWE-116/DoubleEscaping.ql

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ string getStringValue(RegExpLiteral rl) {
4646
*/
4747
DataFlow::Node getASimplePredecessor(DataFlow::Node nd) {
4848
result = nd.getAPredecessor() and
49-
not nd.(DataFlow::SsaDefinitionNode).getSsaVariable().getDefinition() instanceof SsaPhiNode
49+
not exists(SsaDefinition ssa |
50+
ssa = nd.(DataFlow::SsaDefinitionNode).getSsaVariable().getDefinition()
51+
|
52+
ssa instanceof SsaPhiNode or
53+
ssa instanceof SsaVariableCapture
54+
)
5055
}
5156

5257
/**

javascript/ql/test/query-tests/Security/CWE-116/DoubleEscaping/tst.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,10 @@ function badEncodeWithReplacer(s) {
8383
function badRoundtrip(s) {
8484
return s.replace(/\\\\/g, "\\").replace(/\\/g, "\\\\");
8585
}
86+
87+
function testWithCapturedVar(x) {
88+
var captured = x;
89+
(function() {
90+
captured = captured.replace(/\\/g, "\\\\");
91+
})();
92+
}

0 commit comments

Comments
 (0)