Handle invalid RPC escape sequences
This commit is contained in:
@@ -12,6 +12,7 @@ function escapeControlCharactersInStrings(payload: string): string {
|
||||
let result = "";
|
||||
let inString = false;
|
||||
let escaping = false;
|
||||
let unicodeDigitsRemaining = 0;
|
||||
|
||||
for (let index = 0; index < payload.length; index += 1) {
|
||||
const char = payload[index];
|
||||
@@ -25,7 +26,41 @@ function escapeControlCharactersInStrings(payload: string): string {
|
||||
}
|
||||
|
||||
if (escaping) {
|
||||
result += char;
|
||||
if (unicodeDigitsRemaining > 0) {
|
||||
if (/^[0-9a-fA-F]$/.test(char)) {
|
||||
result += char;
|
||||
unicodeDigitsRemaining -= 1;
|
||||
if (unicodeDigitsRemaining === 0) {
|
||||
escaping = false;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
result += "\\u";
|
||||
result += "0".repeat(unicodeDigitsRemaining);
|
||||
unicodeDigitsRemaining = 0;
|
||||
escaping = false;
|
||||
}
|
||||
|
||||
if (char === "\"" || char === "\\" || char === "/" || char === "b" || char === "f" || char === "n" || char === "r" || char === "t") {
|
||||
result += char;
|
||||
escaping = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (char === "u") {
|
||||
result += char;
|
||||
unicodeDigitsRemaining = 4;
|
||||
continue;
|
||||
}
|
||||
|
||||
result += "\\\\";
|
||||
const code = char.charCodeAt(0);
|
||||
if (code <= 0x1f) {
|
||||
result += `u${code.toString(16).padStart(4, "0")}`;
|
||||
} else {
|
||||
result += char;
|
||||
}
|
||||
escaping = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user