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

Skip to content

Commit 0edb70f

Browse files
author
Max Schaefer
committed
JavaScript: Deal with escape-unescape-escape (and similar) chains.
1 parent cb54618 commit 0edb70f

2 files changed

Lines changed: 10 additions & 2 deletions

File tree

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,9 @@ abstract class Replacement extends DataFlow::Node {
128128
exists(Replacement pred | pred = this.getPreviousReplacement() |
129129
if pred.escapes(_, metachar)
130130
then result = pred
131-
else result = pred.getAnEarlierEscaping(metachar)
131+
else (
132+
not pred.unescapes(metachar, _) and result = pred.getAnEarlierEscaping(metachar)
133+
)
132134
)
133135
}
134136

@@ -140,7 +142,9 @@ abstract class Replacement extends DataFlow::Node {
140142
exists(Replacement succ | this = succ.getPreviousReplacement() |
141143
if succ.unescapes(metachar, _)
142144
then result = succ
143-
else result = succ.getALaterUnescaping(metachar)
145+
else (
146+
not succ.escapes(_, metachar) and result = succ.getALaterUnescaping(metachar)
147+
)
144148
)
145149
}
146150
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,7 @@ function testWithCapturedVar(x) {
9090
captured = captured.replace(/\\/g, "\\\\");
9191
})();
9292
}
93+
94+
function encodeDecodeEncode(s) {
95+
return goodEncode(goodDecode(goodEncode(s)));
96+
}

0 commit comments

Comments
 (0)