[gnome-online-accounts] oauth2: Avoid CRITICALs if get_tokens_sync can't parse response



commit 813d45e992ec29f0e70a22aada332cada75a137b
Author: Debarshi Ray <debarshir gnome org>
Date:   Wed Aug 2 18:06:48 2017 +0200

    oauth2: Avoid CRITICALs if get_tokens_sync can't parse response
    
    The json_object_get_string_member API expects the member to be present.
    Therefore, we should not use its return value to determine its
    availability. Otherwise it will lead to:
      Json-CRITICAL **: json_object_get_string_member: assertion
        'node != NULL' failed
    
    https://bugzilla.gnome.org/show_bug.cgi?id=785726

 src/goabackend/goaoauth2provider.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
---
diff --git a/src/goabackend/goaoauth2provider.c b/src/goabackend/goaoauth2provider.c
index 564ba64..8787dce 100644
--- a/src/goabackend/goaoauth2provider.c
+++ b/src/goabackend/goaoauth2provider.c
@@ -754,8 +754,7 @@ get_tokens_sync (GoaOAuth2Provider  *self,
           goto out;
         }
       object = json_node_get_object (json_parser_get_root (parser));
-      ret_access_token = g_strdup (json_object_get_string_member (object, "access_token"));
-      if (ret_access_token == NULL)
+      if (!json_object_has_member (object, "access_token"))
         {
           g_warning ("Did not find access_token in JSON data");
           g_set_error (error,
@@ -765,6 +764,9 @@ get_tokens_sync (GoaOAuth2Provider  *self,
           g_object_unref (parser);
           goto out;
         }
+
+      ret_access_token = g_strdup (json_object_get_string_member (object, "access_token"));
+
       /* refresh_token is optional... */
       if (json_object_has_member (object, "refresh_token"))
         ret_refresh_token = g_strdup (json_object_get_string_member (object, "refresh_token"));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]