Skip to content

Commit 7026222

Browse files
committed
escape HTML - fixes #1066
1 parent d280d1d commit 7026222

File tree

4 files changed

+17
-5
lines changed

4 files changed

+17
-5
lines changed

src/generators/nodes/Element.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import deindent from '../../utils/deindent';
2-
import { stringify } from '../../utils/stringify';
2+
import { stringify, escapeHTML } from '../../utils/stringify';
33
import flattenReference from '../../utils/flattenReference';
44
import isVoidElementName from '../../utils/isVoidElementName';
55
import validCalleeObjects from '../../utils/validCalleeObjects';
@@ -414,7 +414,7 @@ export default class Element extends Node {
414414
}
415415

416416
function toHTML(node: Element | Text) {
417-
if (node.type === 'Text') return node.data;
417+
if (node.type === 'Text') return escapeHTML(node.data);
418418

419419
let open = `<${node.name}`;
420420

Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { SsrGenerator } from '../index';
22
import Block from '../Block';
3-
import { escape } from '../../../utils/stringify';
3+
import { escape, escapeHTML } from '../../../utils/stringify';
44
import { Node } from '../../../interfaces';
55

66
export default function visitText(
77
generator: SsrGenerator,
88
block: Block,
99
node: Node
1010
) {
11-
generator.append(escape(node.data).replace(/(\${|`|\\)/g, '\\$1'));
11+
generator.append(escapeHTML(escape(node.data).replace(/(\${|`|\\)/g, '\\$1')));
1212
}

src/utils/stringify.ts

+12
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,15 @@ export function escape(data: string, { onlyEscapeAtSymbol = false } = {}) {
77
return match + match[0];
88
});
99
}
10+
11+
const escaped = {
12+
'"': '&quot;',
13+
"'": '&##39;',
14+
'&': '&amp;',
15+
'<': '&lt;',
16+
'>': '&gt;'
17+
};
18+
19+
export function escapeHTML(html) {
20+
return String(html).replace(/["'&<>]/g, match => escaped[match]);
21+
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
<div>
2-
<p>foo: ''</p>
2+
<p>foo: &#39;&#39;</p>
33
</div>

0 commit comments

Comments
 (0)