Managesieve: fix memory leak when saving password from account prefs
[claws.git] / src / plugins / managesieve / sieve_prefs.c
index 381596a9a4e8edf3afe33b069559a8c6cbcad625..9aaeebe12abf36fd515aded504791096f72f2b54 100644 (file)
@@ -191,11 +191,11 @@ static void sieve_prefs_account_create_widget_func(PrefsPage *_page,
        gtk_box_pack_start (GTK_BOX (page_vbox), tls_vbox, FALSE, FALSE, 0);
 
        RADIO_ADD(tls_radio_no, tls_group, hbox, tls_vbox,
-                       _("No TLS"));
+                       _("No encryption"));
        RADIO_ADD(tls_radio_maybe, tls_group, hbox, tls_vbox,
-                       _("Use TLS when available"));
+                       _("Use STARTTLS when available"));
        RADIO_ADD(tls_radio_yes, tls_group, hbox, tls_vbox,
-                       _("Require TLS"));
+                       _("Require STARTTLS"));
 
        /* Authentication */
 
@@ -338,6 +338,8 @@ static void sieve_prefs_account_create_widget_func(PrefsPage *_page,
 
        /* Free things */
        g_object_unref(G_OBJECT(size_group));
+
+       sieve_prefs_account_free_config(config);
 }
 
 static void sieve_prefs_account_destroy_widget_func(PrefsPage *_page)
@@ -375,9 +377,10 @@ static gint sieve_prefs_account_apply(struct SieveAccountPage *page)
 
        config->host = gtk_editable_get_chars(GTK_EDITABLE(page->host_entry), 0, -1);
        config->userid = gtk_editable_get_chars(GTK_EDITABLE(page->uid_entry), 0, -1);
-       passwd_store_set_account(page->account->account_id, "sieve",
-                       gtk_editable_get_chars(GTK_EDITABLE(page->pass_entry), 0, -1),
-                       FALSE);
+       gchar *pwd = gtk_editable_get_chars(GTK_EDITABLE(page->pass_entry), 0, -1);
+       passwd_store_set_account(page->account->account_id, "sieve", pwd, FALSE);
+       memset(pwd, 0, strlen(pwd));
+       g_free(pwd);
        config->auth_type = combobox_get_active_data(GTK_COMBO_BOX(page->auth_menu));
 
        sieve_prefs_account_set_config(page->account, config);
@@ -501,6 +504,8 @@ struct SieveAccountConfig *sieve_prefs_account_get_config(
        if (confstr == NULL)
                return config;
 
+       enc_userid[0] = '\0';
+       enc_passwd[0] = '\0';
 #if defined(G_OS_WIN32) || defined(__OpenBSD__)
        sscanf(confstr, "%c%c %255s %c%hu %hhu %hhu %hhu %255s %255s",
 #else