diff --git a/site/src/modules/resources/AgentLogs/AgentLogLine.test.tsx b/site/src/modules/resources/AgentLogs/AgentLogLine.test.tsx new file mode 100644 index 0000000000..80b1d900b0 --- /dev/null +++ b/site/src/modules/resources/AgentLogs/AgentLogLine.test.tsx @@ -0,0 +1,23 @@ +import { screen } from "@testing-library/react"; +import type { Line } from "#/components/Logs/LogLine"; +import { renderComponent } from "#/testHelpers/renderHelpers"; +import { AgentLogLine } from "./AgentLogLine"; + +const line: Line = { + id: 1, + level: "info", + output: 'safe xss', + sourceId: "source-id", + time: "2024-03-14T11:31:04.090715Z", +}; + +describe("AgentLogLine", () => { + it("renders log HTML as escaped text", () => { + renderComponent(); + + expect(screen.queryByTestId("agent-log-xss")).not.toBeInTheDocument(); + expect( + screen.getByText(/safe xss<\/span>/), + ).toBeInTheDocument(); + }); +}); diff --git a/site/src/modules/resources/AgentLogs/AgentLogLine.tsx b/site/src/modules/resources/AgentLogs/AgentLogLine.tsx index 2fc68a63c2..d7b3c50dbf 100644 --- a/site/src/modules/resources/AgentLogs/AgentLogLine.tsx +++ b/site/src/modules/resources/AgentLogs/AgentLogLine.tsx @@ -5,7 +5,7 @@ import { type Line, LogLine, LogLinePrefix } from "#/components/Logs/LogLine"; // Approximate height of a log line. Used to control virtualized list height. export const AGENT_LOG_LINE_HEIGHT = 20; -const convert = new AnsiToHTML(); +const convert = new AnsiToHTML({ escapeXML: true }); interface AgentLogLineProps { line: Line;