[epiphany/gnome-3-28] bookmark: ensure tags sequence is always created



commit 005773325a8b12f2e550de6695cf60d65177dcf5
Author: Michael Catanzaro <mcatanzaro igalia com>
Date:   Mon Jan 7 19:38:22 2019 +0000

    bookmark: ensure tags sequence is always created
    
    Somehow we are getting EphyBookmarks objects deserialized without
    initializing the tags property. I'm not sure how this happens. It even
    happens for JSON corresponding to bookmarks that definitely have tags
    set. Anyway, ephy_bookmark_get_tags() is used as if the result is not
    nullable, so let's guarantee this and return an empty list instead in
    this case.
    
    This is a speculative fix for #612. It should fix the reported crash,
    but it's possible it will only uncover a subsequent crash.
    
    
    (cherry picked from commit 672cffa5ec652a5d5f7d98d0e0664408d58dcf8c)

 src/bookmarks/ephy-bookmark.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
---
diff --git a/src/bookmarks/ephy-bookmark.c b/src/bookmarks/ephy-bookmark.c
index 390472e24..016d50fe0 100644
--- a/src/bookmarks/ephy-bookmark.c
+++ b/src/bookmarks/ephy-bookmark.c
@@ -99,9 +99,10 @@ ephy_bookmark_set_property (GObject      *object,
       ephy_bookmark_set_url (self, g_value_get_string (value));
       break;
     case PROP_TAGS:
-      if (self->tags != NULL)
-        g_sequence_free (self->tags);
+      g_sequence_free (self->tags);
       self->tags = g_value_get_pointer (value);
+      if (!self->tags)
+        self->tags = g_sequence_new (g_free);
       break;
     case PROP_TYPE:
       g_free (self->type);
@@ -176,8 +177,7 @@ ephy_bookmark_finalize (GObject *object)
   g_free (self->title);
   g_free (self->id);
 
-  if (self->tags)
-    g_sequence_free (self->tags);
+  g_sequence_free (self->tags);
 
   G_OBJECT_CLASS (ephy_bookmark_parent_class)->finalize (object);
 }
@@ -279,6 +279,7 @@ ephy_bookmark_class_init (EphyBookmarkClass *klass)
 static void
 ephy_bookmark_init (EphyBookmark *self)
 {
+  self->tags = g_sequence_new (g_free);
 }
 
 EphyBookmark *
@@ -456,6 +457,7 @@ GSequence *
 ephy_bookmark_get_tags (EphyBookmark *self)
 {
   g_assert (EPHY_IS_BOOKMARK (self));
+  g_assert (self->tags);
 
   return self->tags;
 }


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