Socket
Socket
Sign inDemoInstall

xmldom

Package Overview
Dependencies
Maintainers
5
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

xmldom - npm Package Compare versions

Comparing version 0.1.19 to 0.1.20

33

dom.js

@@ -270,2 +270,4 @@ /*

var doc = new Document();
doc.implementation = this;
doc.childNodes = new NodeList();
doc.doctype = doctype;

@@ -275,4 +277,2 @@ if(doctype){

}
doc.implementation = this;
doc.childNodes = new NodeList();
if(qualifiedName){

@@ -764,3 +764,3 @@ var root = doc.createElementNS(namespaceURI,qualifiedName);

var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
attr.value = attr.nodeValue = value;
attr.value = attr.nodeValue = "" + value;
this.setAttributeNode(attr)

@@ -787,3 +787,3 @@ },

_visitNode(base,function(node){
if(node !== base && node.nodeType === ELEMENT_NODE && node.namespaceURI === namespaceURI && (localName === '*' || node.localName == localName)){
if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
ls.push(node);

@@ -909,11 +909,11 @@ }

function XMLSerializer(){}
XMLSerializer.prototype.serializeToString = function(node){
XMLSerializer.prototype.serializeToString = function(node,attributeSorter){
node.serializeToString(attributeSorter);
}
Node.prototype.toString =function(attributeSorter){
var buf = [];
serializeToString(node,buf);
serializeToString(this,buf,attributeSorter);
return buf.join('');
}
Node.prototype.toString =function(){
return XMLSerializer.prototype.serializeToString(this);
}
function serializeToString(node,buf){
function serializeToString(node,buf,attributeSorter,isHTML){
switch(node.nodeType){

@@ -925,8 +925,11 @@ case ELEMENT_NODE:

var nodeName = node.tagName;
var isHTML = htmlns === node.namespaceURI
isHTML = (htmlns === node.namespaceURI) ||isHTML
buf.push('<',nodeName);
if(attributeSorter){
buf.sort.apply(attrs, attributeSorter);
}
for(var i=0;i<len;i++){
serializeToString(attrs.item(i),buf,isHTML);
serializeToString(attrs.item(i),buf,attributeSorter,isHTML);
}
if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
if(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){
buf.push('>');

@@ -940,3 +943,3 @@ //if is cdata child node

while(child){
serializeToString(child,buf);
serializeToString(child,buf,attributeSorter,isHTML);
child = child.nextSibling;

@@ -954,3 +957,3 @@ }

while(child){
serializeToString(child,buf);
serializeToString(child,buf,attributeSorter,isHTML);
child = child.nextSibling;

@@ -957,0 +960,0 @@ }

{
"name": "xmldom",
"version": "0.1.19",
"version": "0.1.20",
"description": "A W3C Standard XML DOM(Level2 CORE) implementation and parser(DOMParser/XMLSerializer).",

@@ -5,0 +5,0 @@ "keywords": ["w3c","dom","xml","parser","javascript","DOMParser","XMLSerializer"],

@@ -5,3 +5,3 @@ //[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF
var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\ux203F-\u2040]");
var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\u203F-\u2040]");
var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');

@@ -62,18 +62,20 @@ //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/

function appendText(end){//has some bugs
var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
locator&&position(start);
domBuilder.characters(xt,0,end-start);
start = end
if(end>start){
var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
locator&&position(start);
domBuilder.characters(xt,0,end-start);
start = end
}
}
function position(start,m){
while(start>=endPos && (m = linePattern.exec(source))){
startPos = m.index;
endPos = startPos + m[0].length;
function position(p,m){
while(p>=lineEnd && (m = linePattern.exec(source))){
lineStart = m.index;
lineEnd = lineStart + m[0].length;
locator.lineNumber++;
//console.log('line++:',locator,startPos,endPos)
}
locator.columnNumber = start-startPos+1;
locator.columnNumber = p-lineStart+1;
}
var startPos = 0;
var endPos = 0;
var lineStart = 0;
var lineEnd = 0;
var linePattern = /.+(?:\r\n?|\n)|.*$/g

@@ -86,45 +88,45 @@ var locator = domBuilder.locator;

while(true){
var i = source.indexOf('<',start);
if(i<0){
if(!source.substr(start).match(/^\s*$/)){
var doc = domBuilder.document;
var text = doc.createTextNode(source.substr(start));
doc.appendChild(text);
domBuilder.currentElement = text;
try{
var tagStart = source.indexOf('<',start);
if(tagStart<0){
if(!source.substr(start).match(/^\s*$/)){
var doc = domBuilder.document;
var text = doc.createTextNode(source.substr(start));
doc.appendChild(text);
domBuilder.currentElement = text;
}
return;
}
return;
}
if(i>start){
appendText(i);
}
switch(source.charAt(i+1)){
case '/':
var end = source.indexOf('>',i+3);
var tagName = source.substring(i+2,end);
var config = parseStack.pop();
var localNSMap = config.localNSMap;
if(tagStart>start){
appendText(tagStart);
}
switch(source.charAt(tagStart+1)){
case '/':
var end = source.indexOf('>',tagStart+3);
var tagName = source.substring(tagStart+2,end);
var config = parseStack.pop();
var localNSMap = config.localNSMap;
if(config.tagName != tagName){
errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
}
domBuilder.endElement(config.uri,config.localName,tagName);
if(localNSMap){
for(var prefix in localNSMap){
domBuilder.endPrefixMapping(prefix) ;
}
}
end++;
break;
// end elment
case '?':// <?...?>
locator&&position(tagStart);
end = parseInstruction(source,tagStart,domBuilder);
break;
case '!':// <!doctype,<![CDATA,<!--
locator&&position(tagStart);
end = parseDCC(source,tagStart,domBuilder,errorHandler);
break;
default:
if(config.tagName != tagName){
errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
}
domBuilder.endElement(config.uri,config.localName,tagName);
if(localNSMap){
for(var prefix in localNSMap){
domBuilder.endPrefixMapping(prefix) ;
}
}
end++;
break;
// end elment
case '?':// <?...?>
locator&&position(i);
end = parseInstruction(source,i,domBuilder);
break;
case '!':// <!doctype,<![CDATA,<!--
locator&&position(i);
end = parseDCC(source,i,domBuilder,errorHandler);
break;
default:
try{
locator&&position(i);
locator&&position(tagStart);

@@ -134,13 +136,15 @@ var el = new ElementAttributes();

//elStartEnd
var end = parseElementStartPart(source,i,el,entityReplacer,errorHandler);
var end = parseElementStartPart(source,tagStart,el,entityReplacer,errorHandler);
var len = el.length;
//position fixed
if(len && locator){
var backup = copyLocator(locator,{});
for(var i = 0;i<len;i++){
var a = el[i];
position(a.offset);
a.offset = copyLocator(locator,{});
if(locator){
if(len){
//attribute position fixed
for(var i = 0;i<len;i++){
var a = el[i];
position(a.offset);
a.offset = copyLocator(locator,{});
}
}
copyLocator(backup,locator);
position(end);
}

@@ -161,13 +165,12 @@ if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){

}
}catch(e){
errorHandler.error('element parse error: '+e);
end = -1;
}
}catch(e){
errorHandler.error('element parse error: '+e);
end = -1;
}
if(end<0){
if(end>start){
start = end;
}else{
//TODO: 这里有可能sax回退,有位置错误风险
appendText(i+1);
}else{
start = end;
appendText(Math.max(tagStart,start)+1);
}

@@ -180,3 +183,2 @@ }

return t;
}

@@ -183,0 +185,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc