diff --git a/src/lib/readme.test.ts b/src/lib/readme.test.ts index c653dfb..9308c8c 100644 --- a/src/lib/readme.test.ts +++ b/src/lib/readme.test.ts @@ -71,6 +71,14 @@ describe("parseBlocks", () => { expect(p).toEqual({ kind: "text", segs: [{ text: "it's 'fine' ' <b>" }] }); }); + it("leaves no markup behind in link text, even when tags are nested to dodge one pass", () => { + const [p] = parseBlocks(`

ipt>alert(1)y

`); + if (p.kind !== "text") throw new Error("expected text"); + expect(p.segs).toHaveLength(1); + expect(p.segs[0].text).not.toMatch(/[<>]/); + expect(p.segs[0].text).toContain("alert(1)y"); + }); + it("survives references that name no real character", () => { const [p] = parseBlocks("

a�b�c�d&bogus;e

"); expect(p).toEqual({ kind: "text", segs: [{ text: "a\ufffdb\ufffdc\ufffdd&bogus;e" }] }); diff --git a/src/lib/readme.ts b/src/lib/readme.ts index bade5eb..e2dc86a 100644 --- a/src/lib/readme.ts +++ b/src/lib/readme.ts @@ -54,12 +54,24 @@ function decode(s: string): string { }); } +// Removes markup until none is left: one pass over "ipt>" would leave "