import { describe, expect, it } from "vitest"; import { parseSvgSource } from "../../src/document/source-parser"; import { createEditingProjection, inspectSvgSecurity, } from "../../src/security/sanitize-svg"; function parse(source: string) { const result = parseSvgSource(source, 1); expect(result.semantic).not.toBeNull(); return result.semantic!; } describe("application-owned adversarial SVG policy", () => { it("allows only references that resolve to one unique local ID", () => { const semantic = parse(` `); const projection = createEditingProjection(semantic).source; expect(projection).toContain('id="ok" fill="url(#unique)"'); expect(projection).not.toContain("url(#absent)"); expect(projection).not.toContain('id="ambiguous" fill='); }); it("parses CSS and removes imports, external URLs and behavior-like properties", () => { const semantic = parse(` `); const findings = inspectSvgSecurity(semantic); expect(findings.map((item) => item.code)).toEqual( expect.arrayContaining(["unsafe-stylesheet", "unsafe-inline-css"]), ); const projection = createEditingProjection(semantic).source; expect(projection).not.toContain("evil.example"); expect(projection).not.toContain("behavior:"); expect(projection).not.toContain(" { const semantic = parse(` `); const findings = inspectSvgSecurity(semantic); expect(findings.map((item) => item.code)).toEqual( expect.arrayContaining(["blocked-animate", "blocked-set"]), ); const projection = createEditingProjection(semantic).source; expect(projection).not.toMatch(/ { const semantic = parse(` `); const projection = createEditingProjection(semantic).source; expect(projection).not.toMatch( /javascript:|evil\.example|data:text\/html|x:widget/iu, ); expect(semantic.source).toContain("javascript:"); }); });