Handle errors of garbled JSON sent to the native host
authorMark Donnelly <mark@painless-security.com>
Wed, 3 Dec 2014 17:28:52 +0000 (12:28 -0500)
committerMark Donnelly <mark@painless-security.com>
Wed, 3 Dec 2014 17:28:52 +0000 (12:28 -0500)
chrome/app/navigator.gss.js

index 4a2e09c..a2ed28c 100644 (file)
@@ -67,7 +67,7 @@ var GSSEap = (function ()
         /* This message is destined for us only if all the following apply:
         * - The data.method_name is one of the methods implemented by this
         *   object
         /* This message is destined for us only if all the following apply:
         * - The data.method_name is one of the methods implemented by this
         *   object
-        * - data.return_values exists
+        * - data.return_values exists or data.error_mssage exists
         * - data.cookies exists
         * - One of my callbacks matches the nonce in
         *   data.cookies.navigator_gss_tag
         * - data.cookies exists
         * - One of my callbacks matches the nonce in
         *   data.cookies.navigator_gss_tag
@@ -78,7 +78,8 @@ var GSSEap = (function ()
         method = event.data.method;
         if (
              ( -1 == this.implemented_methods.indexOf(method) ) ||
         method = event.data.method;
         if (
              ( -1 == this.implemented_methods.indexOf(method) ) ||
-             ("undefined" == typeof (event.data.return_values)) ||
+             (  ("undefined" == typeof (event.data.return_values) ) &&
+                ("undefined" == typeof (event.data.error_message) ) ) ||
              ("undefined" == typeof (event.data.cookies)))
         {
             return;
              ("undefined" == typeof (event.data.cookies)))
         {
             return;
@@ -96,7 +97,11 @@ var GSSEap = (function ()
         app_tag = event.data.cookies.app_tag;
         error = this.errors[nonce] || this.default_error;
 
         app_tag = event.data.cookies.app_tag;
         error = this.errors[nonce] || this.default_error;
 
-        if (this.gss_error(event.data.return_values.major_status))
+        if ("undefined" != typeof(event.data.error_message) )
+        {
+            error(-1, -1, "Error parsing message: " + event.data.error_message, app_tag);
+        }
+        else if (this.gss_error(event.data.return_values.major_status))
         {
             var errMsg = "Error during " + method + ": " + 
               "Major status message: " + 
         {
             var errMsg = "Error during " + method + ": " + 
               "Major status message: " +