diff --git a/extensions/signal/src/client-container.test.ts b/extensions/signal/src/client-container.test.ts index e68dc474052..d6b742e37f7 100644 --- a/extensions/signal/src/client-container.test.ts +++ b/extensions/signal/src/client-container.test.ts @@ -364,6 +364,26 @@ describe("containerSendMessage", () => { expect(body.message).toBe("**Bold** \\* not italic"); }); + it("preserves literal backslashes in styled container messages", async () => { + mockFetch.mockResolvedValue({ + ok: true, + status: 200, + text: async () => JSON.stringify({}), + }); + + await containerSendMessage({ + baseUrl: "http://localhost:8080", + account: "+14259798283", + recipients: ["+15550001111"], + message: "Bold C:\\Temp\\file and /foo\\bar/", + textStyles: [{ start: 0, length: 4, style: "BOLD" }], + }); + + const callArgs = mockFetch.mock.calls[0]; + const body = JSON.parse(callArgs[1].body); + expect(body.message).toBe("**Bold** C:\\Temp\\file and /foo\\bar/"); + }); + it("includes attachments as base64 data URIs", async () => { const fs = await import("node:fs/promises"); const os = await import("node:os"); diff --git a/extensions/signal/src/client-container.ts b/extensions/signal/src/client-container.ts index 30fa3f7fce3..633384370ad 100644 --- a/extensions/signal/src/client-container.ts +++ b/extensions/signal/src/client-container.ts @@ -392,7 +392,7 @@ async function filesToBase64DataUris(filePaths: string[]): Promise { } function escapeContainerStyledText(text: string): string { - return text.replace(/[\\*~`|]/g, (char) => `\\${char}`); + return text.replace(/[*~`|]/g, (char) => `\\${char}`); } function renderContainerStyledText(