This repository was archived by the owner on Jan 7, 2021. It is now read-only.
File tree Expand file tree Collapse file tree 6 files changed +33
-15
lines changed
Expand file tree Collapse file tree 6 files changed +33
-15
lines changed Original file line number Diff line number Diff line change @@ -76,7 +76,7 @@ ToXml.prototype.openTag = function(key) {
7676}
7777ToXml . prototype . addAttr = function ( key , val ) {
7878 if ( this . options . sanitize ) {
79- val = sanitizer . sanitize ( val ) ;
79+ val = sanitizer . sanitize ( val , false , true ) ;
8080 }
8181 this . xml += ' ' + key + '="' + val + '"' ;
8282}
Original file line number Diff line number Diff line change 1212 * " "
1313 * ' '
1414 */
15- var chars = {
15+ // used for body text
16+ var charsEscape = {
17+ '&' : '&' ,
18+ '<' : '<' ,
19+ '>' : '>'
20+ } ;
21+
22+ var charsUnescape = {
23+ '&' : '&' ,
24+ '#' : '#' ,
25+ '<' : '<' ,
26+ '>' : '>' ,
27+ '(' : '(' ,
28+ ')' : ')' ,
29+ '"' : '"' ,
30+ ''' : "'" ,
31+ "" : "\u001F"
32+ } ;
33+
34+ // used in attribute values
35+ var charsAttrEscape = {
1636 '&' : '&' ,
17- '#' : '#' ,
1837 '<' : '<' ,
1938 '>' : '>' ,
20- '(' : '(' ,
21- ')' : ')' ,
2239 '"' : '"' ,
2340 "'" : '''
2441} ;
@@ -27,17 +44,17 @@ function escapeRegExp(string) {
2744 return string . replace ( / ( [ . * + ? ^ = ! : $ { } ( ) | \[ \] \/ \\ ] ) / g, "\\$1" ) ;
2845}
2946
30- exports . sanitize = function sanitize ( value , reverse ) {
47+ // sanitize body text
48+ exports . sanitize = function sanitize ( value , reverse , attribute ) {
3149 if ( typeof value !== 'string' ) {
3250 return value ;
3351 }
3452
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- }
53+ var chars = reverse ? charsUnescape : ( attribute ? charsAttrEscape : charsEscape ) ;
54+ var keys = Object . keys ( chars ) ;
55+
56+ keys . forEach ( function ( key ) {
57+ value = value . replace ( new RegExp ( escapeRegExp ( key ) , 'g' ) , chars [ key ] ) ;
4158 } ) ;
4259
4360 return value ;
Original file line number Diff line number Diff line change @@ -60,6 +60,7 @@ function endElement(name) {
6060 currentObject [ textNodeName ( ) ] = currentObject [ textNodeName ( ) ] . trim ( )
6161 }
6262
63+ // node-expat already reverse sanitizes it whether we like it or not
6364 //if (options.sanitize) {
6465 // currentObject[textNodeName()] = sanitizer.sanitize(currentObject[textNodeName()], true);
6566 //}
Original file line number Diff line number Diff line change 11{
22 "name" : " xml2json" ,
3- "version" : " 0.11.1 " ,
3+ "version" : " 0.11.2 " ,
44 "description" : " Converts xml to json and vice-versa, using node-expat." ,
55 "repository" : " git://github.com/buglabs/node-xml2json.git" ,
66 "license" : " MIT" ,
Original file line number Diff line number Diff line change 1- {"e" :{"a" :{"b" :" Smith & Son" ,"$t" :" Movers & <b>Shakers</b> Extraordinaire" }}}
1+ {"e" :{"a" :{"b" :" < \" Smith\" & ' Son'> " ,"$t" :" Movers & <b>Shakers</b> Extraordinaire #() \" ' " }}}
Original file line number Diff line number Diff line change 1- <e ><a b =" Smith & Son" >Movers & < b> Shakers< /b> Extraordinaire</a ></e >
1+ <e ><a b =" <" Smith" & ' Son'> " >Movers & < b> Shakers< /b> Extraordinaire #()"' </a ></e >
You can’t perform that action at this time.
0 commit comments