Handle invalid RPC escape sequences
This commit is contained in:
@@ -12,6 +12,7 @@ function escapeControlCharactersInStrings(payload: string): string {
|
|||||||
let result = "";
|
let result = "";
|
||||||
let inString = false;
|
let inString = false;
|
||||||
let escaping = false;
|
let escaping = false;
|
||||||
|
let unicodeDigitsRemaining = 0;
|
||||||
|
|
||||||
for (let index = 0; index < payload.length; index += 1) {
|
for (let index = 0; index < payload.length; index += 1) {
|
||||||
const char = payload[index];
|
const char = payload[index];
|
||||||
@@ -25,7 +26,41 @@ function escapeControlCharactersInStrings(payload: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (escaping) {
|
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;
|
escaping = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user