Skip to content

Commit ddcd0ac

Browse files
committed
Escape regex char in entity name
1 parent 341b582 commit ddcd0ac

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

src/v6/EntitiesParser.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,13 @@ export default class EntitiesParser{
3737
}
3838
addExternalEntity(key,val){
3939
validateEntityName(key);
40+
const escaped = key.replace(/[.\-+*:]/g, '\\.');
4041
if(val.indexOf("&") !== -1) {
4142
reportWarning(`Entity ${key} is not added as '&' is found in value;`)
4243
return;
4344
}else{
44-
this.lastEntities[ent] = {
45-
regex: new RegExp("&"+key+";","g"),
45+
this.lastEntities[key] = {
46+
regex: new RegExp("&"+escaped+";","g"),
4647
val : val
4748
}
4849
}
@@ -52,8 +53,9 @@ export default class EntitiesParser{
5253
const entKeys = Object.keys(entities);
5354
for (let i = 0; i < entKeys.length; i++) {
5455
const ent = entKeys[i];
56+
const escaped = ent.replace(/[.\-+*:]/g, '\\.');
5557
this.docTypeEntities[ent] = {
56-
regex: new RegExp("&"+ent+";","g"),
58+
regex: new RegExp("&"+escaped+";","g"),
5759
val : entities[ent]
5860
}
5961
}
@@ -89,11 +91,11 @@ export default class EntitiesParser{
8991
}
9092
return val;
9193
}
92-
};
94+
}
9395

9496
//an entity name should not contains special characters that may be used in regex
9597
//Eg !?\\\/[]$%{}^&*()<>
96-
const specialChar = "!?\\\/[]$%{}^&*()<>|+";
98+
const specialChar = "!?\\/[]$%{}^&*()<>|+";
9799

98100
function validateEntityName(name){
99101
for (let i = 0; i < specialChar.length; i++) {

src/xmlparser/DocTypeReader.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ export default class DocTypeReader{
2525
i += 7;
2626
let entityName, val;
2727
[entityName, val,i] = this.readEntityExp(xmlData,i+1,this.suppressValidationErr);
28-
if(val.indexOf("&") === -1) //Parameter entities are not supported
28+
if(val.indexOf("&") === -1){ //Parameter entities are not supported
29+
const escaped = entityName.replace(/[.\-+*:]/g, '\\.');
2930
entities[ entityName ] = {
30-
regx : RegExp( `&${entityName};`,"g"),
31+
regx : RegExp( `&${escaped};`,"g"),
3132
val: val
3233
};
34+
}
3335
}
3436
else if( hasBody && hasSeq(xmlData, "!ELEMENT",i)) {
3537
i += 8;//Not supported

0 commit comments

Comments
 (0)