Skip to content

Commit

Permalink
Merge pull request #5236 from mermaid-js/fix/DompurifyHooks
Browse files Browse the repository at this point in the history
fix: Dompurify Hooks
  • Loading branch information
sidharthv96 committed Jan 27, 2024
2 parents 91907fe + 7ca990d commit c5272d5
Showing 1 changed file with 24 additions and 9 deletions.
33 changes: 24 additions & 9 deletions packages/mermaid/src/diagrams/common/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,18 @@ export const getRows = (s?: string): string[] => {
return str.split('#br#');
};

/**
* Removes script tags from a text
*
* @param txt - The text to sanitize
* @returns The safer text
*/
export const removeScript = (txt: string): string => {
const setupDompurifyHooksIfNotSetup = (() => {
let setup = false;

return () => {
if (!setup) {
setupDompurifyHooks();
setup = true;
}
};
})();

function setupDompurifyHooks() {
const TEMPORARY_ATTRIBUTE = 'data-temp-href-target';

DOMPurify.addHook('beforeSanitizeAttributes', (node: Element) => {
Expand All @@ -33,8 +38,6 @@ export const removeScript = (txt: string): string => {
}
});

const sanitizedText = DOMPurify.sanitize(txt);

DOMPurify.addHook('afterSanitizeAttributes', (node: Element) => {
if (node.tagName === 'A' && node.hasAttribute(TEMPORARY_ATTRIBUTE)) {
node.setAttribute('target', node.getAttribute(TEMPORARY_ATTRIBUTE) || '');
Expand All @@ -44,6 +47,18 @@ export const removeScript = (txt: string): string => {
}
}
});
}

/**
* Removes script tags from a text
*
* @param txt - The text to sanitize
* @returns The safer text
*/
export const removeScript = (txt: string): string => {
setupDompurifyHooksIfNotSetup();

const sanitizedText = DOMPurify.sanitize(txt);

return sanitizedText;
};
Expand Down

0 comments on commit c5272d5

Please sign in to comment.