Fix double-free of keys
authorColin Leroy <colin@colino.net>
Mon, 18 Sep 2017 08:03:39 +0000 (10:03 +0200)
committerColin Leroy <colin@colino.net>
Mon, 18 Sep 2017 08:03:39 +0000 (10:03 +0200)
src/plugins/pgpcore/select-keys.c

index 47e4b66..92c228b 100644 (file)
@@ -167,6 +167,9 @@ static void
 destroy_key (gpointer data)
 {
     gpgme_key_t key = data;
+
+    debug_print("unref key %p\n", key);
+
     gpgme_key_unref (key);
 }
 
@@ -255,6 +258,7 @@ set_row (GtkCMCList *clist, gpgme_key_t key, gpgme_protocol_t proto)
     row = gtk_cmclist_append (clist, (gchar**)text);
     g_free (algo_buf);
 
+    gpgme_key_ref(key);
     gtk_cmclist_set_row_data_full (clist, row, key, destroy_key);
 }
 
@@ -349,7 +353,9 @@ fill_clist (struct select_keys_s *sk, const char *pattern, gpgme_protocol_t prot
     if (exact_match && num_results == 1)
            return last_key;
 
-    gpgme_key_unref(last_key);
+    if (last_key != NULL)
+        gpgme_key_unref(last_key);
+
     return NULL;
 }