[frogr] Fixed segmentation fault because of using GAppInfo stuff



commit 30d6dae6d4418dd58a48de884144fa04fdfbda7b
Author: Mario Sanchez Prada <msanchez igalia com>
Date:   Sun Jul 17 22:00:52 2011 +0200

    Fixed segmentation fault because of using GAppInfo stuff

 src/frogr-details-dialog.c |    9 +++++++--
 src/frogr-main-view.c      |    9 +++++++--
 src/frogr-util.c           |    3 ++-
 3 files changed, 16 insertions(+), 5 deletions(-)
---
diff --git a/src/frogr-details-dialog.c b/src/frogr-details-dialog.c
index bc394b3..db2117f 100644
--- a/src/frogr-details-dialog.c
+++ b/src/frogr-details-dialog.c
@@ -1198,11 +1198,16 @@ _on_picture_button_clicked (GtkButton *button, gpointer data)
   FrogrDetailsDialogPrivate *priv = FROGR_DETAILS_DIALOG_GET_PRIVATE (self);
   GSList *current_pic = NULL;
   GList *uris_list = NULL;
+  FrogrPicture *picture = NULL;
+  gchar *fileuri = NULL;
 
   for (current_pic = priv->pictures; current_pic; current_pic = g_slist_next (current_pic))
     {
-      FrogrPicture *picture = FROGR_PICTURE (current_pic->data);
-      uris_list = g_list_append (uris_list, (gchar*) frogr_picture_get_fileuri (picture));
+      picture = FROGR_PICTURE (current_pic->data);
+      fileuri = g_strdup (frogr_picture_get_fileuri (picture));
+
+      /* Dupped uris in the GList must NOT be freed here */
+      uris_list = g_list_append (uris_list, fileuri);
     }
 
   frogr_util_open_images_in_viewer (uris_list);
diff --git a/src/frogr-main-view.c b/src/frogr-main-view.c
index 90613e0..9c5cf81 100644
--- a/src/frogr-main-view.c
+++ b/src/frogr-main-view.c
@@ -987,6 +987,8 @@ _open_pictures_in_external_viewer (FrogrMainView *self)
   GSList *pictures = NULL;
   GSList *current_pic = NULL;
   GList *uris_list = NULL;
+  FrogrPicture *picture = NULL;
+  gchar *fileuri = NULL;
 
   if (!_pictures_selected_required_check (self))
     return;
@@ -994,8 +996,11 @@ _open_pictures_in_external_viewer (FrogrMainView *self)
   pictures = _get_selected_pictures (self);
   for (current_pic = pictures; current_pic; current_pic = g_slist_next (current_pic))
     {
-      FrogrPicture *picture = FROGR_PICTURE (current_pic->data);
-      uris_list = g_list_append (uris_list, (gchar*) frogr_picture_get_fileuri (picture));
+      picture = FROGR_PICTURE (current_pic->data);
+      fileuri = g_strdup (frogr_picture_get_fileuri (picture));
+
+      /* Dupped uris in the GList must NOT be freed here */
+      uris_list = g_list_append (uris_list, fileuri);
     }
   g_slist_foreach (pictures, (GFunc) g_object_unref, NULL);
   g_slist_free (pictures);
diff --git a/src/frogr-util.c b/src/frogr-util.c
index 1b580b0..3b7a5e8 100644
--- a/src/frogr-util.c
+++ b/src/frogr-util.c
@@ -175,7 +175,8 @@ frogr_util_open_uri (const gchar *uri)
   if (!uri)
     return;
 
-  uris_list = g_list_append (uris_list, (gchar *) uri);
+  /* Dupped uris in the GList must NOT be freed here */
+  uris_list = g_list_append (uris_list, g_strdup (uri));
   app_info = g_app_info_get_default_for_uri_scheme ("http");
 
   _open_uris_with_app_info (uris_list, app_info);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]