Handle invalid RPC escape sequences

This commit is contained in:
Codex Bot
2026-03-24 01:06:27 +01:00
parent e4d57a91de
commit debbed7941

View File

@@ -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;
}