From d571984e24c0a24fd1d09da4341f79eea7286723 Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Mon, 7 Jan 2019 19:38:22 +0000 Subject: [PATCH] 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 43619a4ef..514a54aec 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; } -- 2.18.1