Fix null pointer dereference
[claws.git] / src / plugins / mailmbox / plugin_gtk.c
index e6b30f55524a1df624caa74a5829bf80fe1ba459..16ea162f8184aa395a0652796917148ce9588c9f 100644 (file)
@@ -83,7 +83,7 @@ static FolderViewPopup claws_mailmbox_popup =
 
 static GtkActionEntry mainwindow_add_mailbox[] = {{
        "File/AddMailbox/Mbox",
-       NULL, N_("mbox (etPan!)..."), NULL, NULL, G_CALLBACK(add_mailbox)
+       NULL, "mbox...", NULL, NULL, G_CALLBACK(add_mailbox)
 }};
 
 static guint main_menu_id = 0;
@@ -112,7 +112,7 @@ void plugin_gtk_done(void)
 
        folderview_unregister_popup(&claws_mailmbox_popup);
 
-       MENUITEM_REMUI_MANAGER(mainwin->ui_manager,mainwin->action_group, "File/AddMailbox/RSSyl", main_menu_id);
+       MENUITEM_REMUI_MANAGER(mainwin->ui_manager,mainwin->action_group, "File/AddMailbox/Mbox", main_menu_id);
        main_menu_id = 0;
 }
 
@@ -146,16 +146,16 @@ static void set_sensitivity(GtkUIManager *ui_manager, FolderItem *item)
 #define SET_SENS(name, sens) \
        cm_menu_set_sensitive_full(ui_manager, "Popup/"name, sens)
 
-       SET_SENS("FolderViewPopup/CreateNewFolder",   item->stype != F_INBOX);
-       SET_SENS("FolderViewPopup/RenameFolder",       item->stype == F_NORMAL && folder_item_parent(item) != NULL);
-       SET_SENS("FolderViewPopup/MoveFolder",      folder_is_normal && folder_item_parent(item) != NULL);
-       SET_SENS("FolderViewPopup/DeleteFolder",            item->stype == F_NORMAL && folder_item_parent(item) != NULL);
+       SET_SENS("FolderViewPopup/CreateNewFolder",     item && item->stype != F_INBOX);
+       SET_SENS("FolderViewPopup/RenameFolder",        item && item->stype == F_NORMAL && folder_item_parent(item) != NULL);
+       SET_SENS("FolderViewPopup/MoveFolder",          folder_is_normal && folder_item_parent(item) != NULL);
+       SET_SENS("FolderViewPopup/DeleteFolder",        item && item->stype == F_NORMAL && folder_item_parent(item) != NULL);
 
-       SET_SENS("FolderViewPopup/CheckNewMessages", folder_item_parent(item) == NULL);
-       SET_SENS("FolderViewPopup/CheckNewFolders",  folder_item_parent(item) == NULL);
-       SET_SENS("FolderViewPopup/RebuildTree",    folder_item_parent(item) == NULL);
+       SET_SENS("FolderViewPopup/CheckNewMessages",    folder_item_parent(item) == NULL);
+       SET_SENS("FolderViewPopup/CheckNewFolders",     folder_item_parent(item) == NULL);
+       SET_SENS("FolderViewPopup/RebuildTree",         folder_item_parent(item) == NULL);
 
-       SET_SENS("FolderViewPopup/RemoveMailbox",         folder_item_parent(item) == NULL);
+       SET_SENS("FolderViewPopup/RemoveMailbox",       folder_item_parent(item) == NULL);
 
 #undef SET_SENS
 }
@@ -198,13 +198,19 @@ static void add_mailbox(GtkAction *action, gpointer callback_data)
                return;
        }
        basename = g_path_get_basename(path);
+
+       if (!folder_local_name_ok(basename)) {
+               g_free(path);
+               g_free(basename);
+               return;
+       }
+
        folder = folder_new(folder_get_class_from_string("mailmbox"), 
                            !strcmp(path, "Mail") ? _("Mailbox") : basename,
                            path);
-       g_free(basename);                           
+       g_free(basename);
        g_free(path);
 
-
        if (folder->klass->create_tree(folder) < 0) {
                alertpanel_error(_("Creation of the mailbox failed.\n"
                                   "Maybe some files already exist, or you don't have the permission to write there."));
@@ -223,7 +229,6 @@ static void add_mailbox(GtkAction *action, gpointer callback_data)
 static void new_folder_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
        FolderItem *item;
        FolderItem *new_item;
        gchar *new_folder;
@@ -232,7 +237,7 @@ static void new_folder_cb(GtkAction *action, gpointer data)
 
        if (!folderview->selected) return;
 
-       item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
+       item = folderview_get_selected_item(folderview);
        g_return_if_fail(item != NULL);
        g_return_if_fail(item->folder != NULL);
 
@@ -251,6 +256,9 @@ static void new_folder_cb(GtkAction *action, gpointer data)
                return;
        }
 
+       if (!folder_local_name_ok(new_folder))
+               return;
+
        name = trim_string(new_folder, 32);
        AUTORELEASE_STR(name, {g_free(name); return;});
 
@@ -418,6 +426,9 @@ static void rename_folder_cb(GtkAction *action, gpointer data)
                return;
        }
 
+       if (!folder_local_name_ok(new_folder))
+               return;
+
        parent = folder_item_parent(item);
        p = g_strconcat(parent->path ? parent->path : "", ".", new_folder, NULL);
        if (folder_find_child_item_by_name(parent, p)) {