diff --git a/packages/mermaid/src/diagrams/class/classDb.ts b/packages/mermaid/src/diagrams/class/classDb.ts index 0e9b67dc9..7e116aada 100644 --- a/packages/mermaid/src/diagrams/class/classDb.ts +++ b/packages/mermaid/src/diagrams/class/classDb.ts @@ -26,6 +26,7 @@ import type { } from './classTypes.js'; import type { Node, Edge } from '../../rendering-util/types.js'; import type { DiagramDB } from '../../diagram-api/types.js'; +import DOMPurify from 'dompurify'; const MERMAID_DOM_ID_PREFIX = 'classId-'; let classCounter = 0; @@ -504,7 +505,7 @@ export class ClassDB implements DiagramDB { const rect = (event.currentTarget as Element).getBoundingClientRect(); tooltipElem.transition().duration(200).style('opacity', '.9'); tooltipElem - .html(this.escapeHtml(title).replace(/<br\/>/g, '
')) + .html(DOMPurify.sanitize(title)) .style('left', `${window.scrollX + rect.left + rect.width / 2}px`) .style('top', `${window.scrollY + rect.bottom + 4}px`); diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.ts index 0c2ef886c..7c389d65c 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.ts @@ -27,7 +27,7 @@ import type { FlowVertex, FlowVertexTypeParam, } from './types.js'; - +import DOMPurify from 'dompurify'; interface LinkData { id: string; } @@ -596,7 +596,7 @@ You have to call mermaid.initialize.` .text(el.attr('title')) .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px') .style('top', window.scrollY + rect.bottom + 'px'); - tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, '
')); + tooltipElem.html(DOMPurify.sanitize(title)); el.classed('hover', true); }) .on('mouseout', (e: MouseEvent) => {