repo: janusweb action: commit revision: path_from: revision_from: 8ab335e419f4073e96bbf9348e424e2cdf481334: path_to: revision_to:
commit 8ab335e419f4073e96bbf9348e424e2cdf481334 Author: James BaicoianuDate: Sun Dec 24 04:23:43 2017 -0800 Throw exception on XML parse error diff --git a/scripts/external/JanusFireboxParser.js b/scripts/external/JanusFireboxParser.js
--- a/scripts/external/JanusFireboxParser.js
+++ b/scripts/external/JanusFireboxParser.js
@@ -199,17 +199,30 @@ JanusFireboxParser.prototype.getOrientation = function(xdir, ydir, zdir) {
return quat;
}
JanusFireboxParser.prototype.parseXML = function(imgxml, leaf, forceLower) {
- var node, root, parent;
+ var node, root, parent, xmldoc;
if (imgxml.nodeName) {
- node = imgxml;
+ xmldoc = node = imgxml;
} else {
- if (window.DOMParser) {
- var parser = new DOMParser();
- node = parser.parseFromString(imgxml,"application/xml").firstChild;
- } else {
- node = new ActiveXObject("Microsoft.XMLDOM");
- node.async = "false";
- node.loadXML(imgxml).firstChild;
+ try {
+ if (window.DOMParser) {
+ var parser = new DOMParser();
+ xmldoc = parser.parseFromString(imgxml,"application/xml");
+ node = xmldoc.firstChild;
+ } else {
+ node = new ActiveXObject("Microsoft.XMLDOM");
+ node.async = "false";
+ node.loadXML(imgxml).firstChild;
+ }
+
+ // Chrome doesn't throw an exception for malformed XML, so we look for a xml tag
+ var parsererrors = node.getElementsByTagName("parsererror");
+ if (parsererrors.length > 0) {
+ // Extract the message from the first div child of the element
+ var errorel = parsererrors[0].getElementsByTagName('div')[0] || parsererrors[0];
+ throw new JanusFireboxParserException(errorel.innerHTML);
+ }
+ } catch (e) {
+ throw new JanusFireboxParserException(e.message);
}
}
root = {};
@@ -296,3 +309,10 @@ JanusFireboxParser.prototype.fixURLEncoding = function(url) {
}
return fixed;
};
+
+/**
+ * Exception class for XML parse errors
+ */
+function JanusFireboxParserException(msg) {
+ this.message = msg;
+}
-----END OF PAGE-----