repo: janusweb
action: commit
revision: 
path_from: 
revision_from: 8ab335e419f4073e96bbf9348e424e2cdf481334:
path_to: 
revision_to: 
git.thebackupbox.net
janusweb
git clone git://git.thebackupbox.net/janusweb
commit 8ab335e419f4073e96bbf9348e424e2cdf481334
Author: James Baicoianu 
Date:   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
index c20de182c2c1084bd05e7f5ef8506a9379398998..
index ..5f8888bef45a9be9d2be807230fc01da37ee12af 100644
--- 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-----