Skip to content

Commit b0f30c8

Browse files
committed
build: sanitize parsed comments
Adds some logic to avoid accidental HTML injection through the Markdown renderer. (cherry picked from commit 60262dc)
1 parent 75f6542 commit b0f30c8

1 file changed

Lines changed: 17 additions & 4 deletions

File tree

tools/markdown-to-html/docs-marked-renderer.mts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,11 @@ export class DocsMarkdownRenderer extends Renderer {
102102
file: string;
103103
region: string;
104104
};
105-
replacement = `<div material-docs-example="${example}"
106-
${file ? `file="${file}"` : ''}
107-
${region ? `region="${region}"` : ''}></div>`;
105+
replacement = `<div material-docs-example="${this._escapeHtml(example)}"
106+
${file ? `file="${this._escapeHtml(file)}"` : ''}
107+
${region ? `region="${this._escapeHtml(region)}"` : ''}></div>`;
108108
} else {
109-
replacement = `<div material-docs-example="${content}"></div>`;
109+
replacement = `<div material-docs-example="${this._escapeHtml(content)}"></div>`;
110110
}
111111

112112
return `${exampleStartMarker}${replacement}${exampleEndMarker}`;
@@ -154,4 +154,17 @@ export class DocsMarkdownRenderer extends Renderer {
154154

155155
return `${markdownOpen}${output}</div>`;
156156
}
157+
158+
private _escapeHtml(text: string): string {
159+
if (!text) {
160+
return text;
161+
}
162+
163+
return text
164+
.replace(/&/g, '&amp;')
165+
.replace(/</g, '&lt;')
166+
.replace(/>/g, '&gt;')
167+
.replace(/"/g, '&quot;')
168+
.replace(/'/g, '&#39;');
169+
}
157170
}

0 commit comments

Comments
 (0)