aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Creswick <dcrewi@gyrae.net>2015-04-05 19:13:57 -0500
committerGerald Combs <gerald@wireshark.org>2015-05-05 23:49:28 +0000
commitb5ef92efc067eb172ab71cc39b0aa3f32ab5f01d (patch)
tree06db956fea686fc6ea7de34cbd6835396e57687c
parentfa04dfdd776e950467aee7f538139fb3fd8a75bb (diff)
GTK UI: remove eo_saveable_pathname in favor of eo_massage_str
The function had several deficiencies: - When "" is passed as the filename, the function returns a null pointer (due to the quirky behavior of g_strsplit_set), which causes a segfault when it's dereferenced later. I'm not sure what the correct return should be, but it shouldn't be NULL. - It leaks memory. (The array of strings returned by g_strsplit_set are never freed.) - It only strips out backslashes. That is not the only character that is disallowed in filenames, even on windows. - The functionality is already provided by eo_massage_str and it does a more complete job of it. Change-Id: I4d9eab7506048c5d04de8f163b8af1e3f67c163d Reviewed-on: https://code.wireshark.org/review/7996 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Reviewed-by: Gerald Combs <gerald@wireshark.org>
-rw-r--r--ui/gtk/export_object_dlg.c35
1 files changed, 6 insertions, 29 deletions
diff --git a/ui/gtk/export_object_dlg.c b/ui/gtk/export_object_dlg.c
index ed19775a6d..c55ec44e3a 100644
--- a/ui/gtk/export_object_dlg.c
+++ b/ui/gtk/export_object_dlg.c
@@ -129,26 +129,6 @@ eo_win_destroy_cb(GtkWindow *win _U_, gpointer data)
if (eo_protocoldata_reset != NULL) eo_protocoldata_reset();
}
-static gchar *eo_saveable_pathname(gchar *filename) {
-gchar **splitted_pathname;
-gchar *auxstring, *saveable_pathname;
-guint nparts,i;
-
- saveable_pathname = NULL;
- splitted_pathname = g_strsplit_set(filename,"\\",-1);
- nparts = g_strv_length(splitted_pathname);
- if (nparts>0) {
- saveable_pathname=g_strdup(splitted_pathname[0]);
- }
- for (i=1;i<nparts;i++) {
- auxstring = g_strconcat(saveable_pathname,"__",splitted_pathname[i],NULL);
- g_free(saveable_pathname);
- saveable_pathname = auxstring;
- }
-
- return saveable_pathname;
-}
-
static char *
gtk_eo_save_object_as_file(export_object_list_t *object_list, char *auxfilename)
{
@@ -178,7 +158,7 @@ eo_save_clicked_cb(GtkWidget *widget _U_, gpointer arg)
{
export_object_list_t *object_list = (export_object_list_t *)arg;
export_object_entry_t *entry;
- gchar *auxfilename = NULL;
+ GString *safe_filename = NULL;
char *pathname;
entry =(export_object_entry_t *) g_slist_nth_data(object_list->entries,
@@ -189,13 +169,13 @@ eo_save_clicked_cb(GtkWidget *widget _U_, gpointer arg)
return;
}
- auxfilename = eo_saveable_pathname(entry->filename);
+ safe_filename = eo_massage_str(entry->filename, 256, 0);
/*
* Loop until the user either selects a file or gives up.
*/
for (;;) {
- pathname = gtk_eo_save_object_as_file(object_list, auxfilename);
+ pathname = gtk_eo_save_object_as_file(object_list, safe_filename->str);
if (pathname == NULL) {
/* User gave up. */
break;
@@ -210,7 +190,7 @@ eo_save_clicked_cb(GtkWidget *widget _U_, gpointer arg)
g_free(pathname);
}
- g_free(auxfilename);
+ g_string_free(safe_filename, TRUE);
}
#define MAXFILELEN 255
@@ -225,7 +205,6 @@ eo_save_all_clicked_cb(GtkWidget *widget _U_, gpointer arg)
gboolean all_saved = TRUE;
gchar *save_in_path;
GString *safe_filename;
- gchar *auxfilename = NULL;
int count = 0;
save_in_w = file_selection_new("Wireshark: Save All Objects In ...",
@@ -241,12 +220,10 @@ eo_save_all_clicked_cb(GtkWidget *widget _U_, gpointer arg)
do {
g_free(save_as_fullpath);
if (entry->filename) {
- auxfilename = eo_saveable_pathname(entry->filename);
- safe_filename = eo_massage_str(auxfilename,
+ safe_filename = eo_massage_str(entry->filename,
MAXFILELEN - strlen(save_in_path), count);
- g_free(auxfilename);
} else {
- char generic_name[256];
+ char generic_name[MAXFILELEN+1];
const char *ext;
ext = ct2ext(entry->content_type);
g_snprintf(generic_name, sizeof(generic_name),