Skip to content

Commit 9f5847a

Browse files
SethFalcoisaacs
authored andcommitted
fix: ignore unparsed entity logic for std xml entities
PR-URL: #266 Credit: @SethFalco Close: #266 Reviewed-by: @HeikoTheissen
1 parent 3af9959 commit 9f5847a

File tree

4 files changed

+63
-3
lines changed

4 files changed

+63
-3
lines changed

lib/sax.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1483,13 +1483,13 @@
14831483
}
14841484

14851485
if (c === ';') {
1486-
if (parser.opt.unparsedEntities) {
1487-
var parsedEntity = parseEntity(parser)
1486+
var parsedEntity = parseEntity(parser)
1487+
if (parser.opt.unparsedEntities && !Object.values(sax.XML_ENTITIES).includes(parsedEntity)) {
14881488
parser.entity = ''
14891489
parser.state = returnState
14901490
parser.write(parsedEntity)
14911491
} else {
1492-
parser[buffer] += parseEntity(parser)
1492+
parser[buffer] += parsedEntity
14931493
parser.entity = ''
14941494
parser.state = returnState
14951495
}

test/unparsed-entities-amp.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
require(__dirname).test({
2+
opt: {unparsedEntities: true},
3+
xml: '<svg>' +
4+
'<text>' +
5+
'&amp;' +
6+
'</text>' +
7+
'</svg>',
8+
expect: [
9+
['opentagstart', {'name': 'SVG', attributes: {}}],
10+
['opentag', {'name': 'SVG', attributes: {}, isSelfClosing: false}],
11+
['opentagstart', {'name': 'TEXT', attributes: {}}],
12+
['opentag', {'name': 'TEXT', attributes: {}, isSelfClosing: false}],
13+
['text', '&'],
14+
['closetag', 'TEXT'],
15+
['closetag', 'SVG']
16+
]
17+
})
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
var sax = require('../lib/sax');
2+
sax.ENTITIES.entity_reference = "<text>entity reference</text>";
3+
sax.ENTITIES.escaped_entity_reference = "&lt;text&gt;escaped entity reference&lt;/text&gt;";
4+
require(__dirname).test({
5+
opt: {unparsedEntities: true},
6+
xml: '<svg>' +
7+
'<text>' +
8+
'&lt;text&gt;escaped literal&lt;/text&gt;' +
9+
'</text>' +
10+
'&entity_reference;' +
11+
'<text>' +
12+
'&escaped_entity_reference;' +
13+
'</text>' +
14+
'</svg>',
15+
expect: [
16+
['opentagstart', {'name': 'SVG', attributes: {}}],
17+
['opentag', {'name': 'SVG', attributes: {}, isSelfClosing: false}],
18+
['opentagstart', {'name': 'TEXT', attributes: {}}],
19+
['opentag', {'name': 'TEXT', attributes: {}, isSelfClosing: false}],
20+
['text', '<text>escaped literal</text>'],
21+
['closetag', 'TEXT'],
22+
['opentagstart', {'name': 'TEXT', attributes: {}}],
23+
['opentag', {'name': 'TEXT', attributes: {}, isSelfClosing: false}],
24+
['text', 'entity reference'],
25+
['closetag', 'TEXT'],
26+
['opentagstart', {'name': 'TEXT', attributes: {}}],
27+
['opentag', {'name': 'TEXT', attributes: {}, isSelfClosing: false}],
28+
['text', '<text>escaped entity reference</text>'],
29+
['closetag', 'TEXT'],
30+
['closetag', 'SVG']
31+
]
32+
})
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
require(__dirname).test({
2+
opt: {unparsedEntities: true},
3+
xml: '<doc a="&#34;">' +
4+
'</doc>',
5+
expect: [
6+
['opentagstart', {'name': 'DOC', attributes: {}}],
7+
['attribute', { name: 'A', value: '"'} ],
8+
['opentag', {'name': 'DOC', attributes: {A: '"'}, isSelfClosing: false}],
9+
['closetag', 'DOC']
10+
]
11+
})

0 commit comments

Comments
 (0)