mirror of
https://github.com/github/codeql.git
synced 2025-12-21 03:06:31 +01:00
JavaScript: Deal with escape-unescape-escape (and similar) chains.
This commit is contained in:
@@ -128,7 +128,9 @@ abstract class Replacement extends DataFlow::Node {
|
|||||||
exists(Replacement pred | pred = this.getPreviousReplacement() |
|
exists(Replacement pred | pred = this.getPreviousReplacement() |
|
||||||
if pred.escapes(_, metachar)
|
if pred.escapes(_, metachar)
|
||||||
then result = pred
|
then result = pred
|
||||||
else result = pred.getAnEarlierEscaping(metachar)
|
else (
|
||||||
|
not pred.unescapes(metachar, _) and result = pred.getAnEarlierEscaping(metachar)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +142,9 @@ abstract class Replacement extends DataFlow::Node {
|
|||||||
exists(Replacement succ | this = succ.getPreviousReplacement() |
|
exists(Replacement succ | this = succ.getPreviousReplacement() |
|
||||||
if succ.unescapes(metachar, _)
|
if succ.unescapes(metachar, _)
|
||||||
then result = succ
|
then result = succ
|
||||||
else result = succ.getALaterUnescaping(metachar)
|
else (
|
||||||
|
not succ.escapes(_, metachar) and result = succ.getALaterUnescaping(metachar)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,3 +90,7 @@ function testWithCapturedVar(x) {
|
|||||||
captured = captured.replace(/\\/g, "\\\\");
|
captured = captured.replace(/\\/g, "\\\\");
|
||||||
})();
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function encodeDecodeEncode(s) {
|
||||||
|
return goodEncode(goodDecode(goodEncode(s)));
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user