This repository was archived by the owner on Jan 7, 2021. It is now read-only.
File tree Expand file tree Collapse file tree 4 files changed +32
-12
lines changed Expand file tree Collapse file tree 4 files changed +32
-12
lines changed Original file line number Diff line number Diff line change @@ -76,7 +76,7 @@ ToXml.prototype.openTag = function(key) {
76
76
}
77
77
ToXml . prototype . addAttr = function ( key , val ) {
78
78
if ( this . options . sanitize ) {
79
- val = sanitizer . sanitize ( val ) ;
79
+ val = sanitizer . sanitize ( val , false , true ) ;
80
80
}
81
81
this . xml += ' ' + key + '="' + val + '"' ;
82
82
}
Original file line number Diff line number Diff line change 12
12
* " "
13
13
* ' '
14
14
*/
15
- var chars = {
15
+ // used for body text
16
+ var charsEscape = {
16
17
'&' : '&' ,
17
18
'#' : '#' ,
18
19
'<' : '<' ,
19
20
'>' : '>' ,
20
- '(' : '(' ,
21
- ')' : ')' ,
21
+ "\u001F" : ""
22
+ } ;
23
+
24
+ var charsUnescape = {
25
+ '&' : '&' ,
26
+ '#' : '#' ,
27
+ '<' : '<' ,
28
+ '>' : '>' ,
29
+ '(' : '(' ,
30
+ ')' : ')' ,
31
+ '"' : '"' ,
32
+ ''' : "'" ,
33
+ "" : "\u001F"
34
+ } ;
35
+
36
+ // used in attribute values
37
+ var charsAttrEscape = {
38
+ '&' : '&' ,
39
+ '<' : '<' ,
40
+ '>' : '>' ,
22
41
'"' : '"' ,
23
42
"'" : '''
24
43
} ;
@@ -27,17 +46,17 @@ function escapeRegExp(string) {
27
46
return string . replace ( / ( [ . * + ? ^ = ! : $ { } ( ) | \[ \] \/ \\ ] ) / g, "\\$1" ) ;
28
47
}
29
48
30
- exports . sanitize = function sanitize ( value , reverse ) {
49
+ // sanitize body text
50
+ exports . sanitize = function sanitize ( value , reverse , attribute ) {
31
51
if ( typeof value !== 'string' ) {
32
52
return value ;
33
53
}
34
54
35
- Object . keys ( chars ) . forEach ( function ( key ) {
36
- if ( reverse ) {
37
- value = value . replace ( new RegExp ( escapeRegExp ( chars [ key ] ) , 'g' ) , key ) ;
38
- } else {
39
- value = value . replace ( new RegExp ( escapeRegExp ( key ) , 'g' ) , chars [ key ] ) ;
40
- }
55
+ var chars = reverse ? charsUnescape : ( attribute ? charsAttrEscape : charsEscape ) ;
56
+ var keys = Object . keys ( chars ) ;
57
+
58
+ keys . forEach ( function ( key ) {
59
+ value = value . replace ( new RegExp ( escapeRegExp ( key ) , 'g' ) , chars [ key ] ) ;
41
60
} ) ;
42
61
43
62
return value ;
Original file line number Diff line number Diff line change @@ -60,6 +60,7 @@ function endElement(name) {
60
60
currentObject [ textNodeName ( ) ] = currentObject [ textNodeName ( ) ] . trim ( )
61
61
}
62
62
63
+ // node-expat already reverse sanitizes it whether we like it or not
63
64
//if (options.sanitize) {
64
65
// currentObject[textNodeName()] = sanitizer.sanitize(currentObject[textNodeName()], true);
65
66
//}
Original file line number Diff line number Diff line change 1
1
{
2
2
"name" : " xml2json" ,
3
- "version" : " 0.11.1 " ,
3
+ "version" : " 0.11.2 " ,
4
4
"description" : " Converts xml to json and vice-versa, using node-expat." ,
5
5
"repository" : " git://github.com/buglabs/node-xml2json.git" ,
6
6
"license" : " MIT" ,
You can’t perform that action at this time.
0 commit comments