rpms/sound-juicer/devel sj-gvfs-crash-fix.patch, NONE, 1.1 sound-juicer.spec, 1.113, 1.114

Bastien Nocera hadess at fedoraproject.org
Thu May 7 18:08:19 UTC 2009


Author: hadess

Update of /cvs/pkgs/rpms/sound-juicer/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv5812

Modified Files:
	sound-juicer.spec 
Added Files:
	sj-gvfs-crash-fix.patch 
Log Message:
* Thu May 07 2009 Bastien Nocera <bnocera at redhat.com> 2.26.1-2
- Fix gvfs metadata getter crasher (#498764)

sj-gvfs-crash-fix.patch:

--- NEW FILE sj-gvfs-crash-fix.patch ---
diff --git a/libjuicer/sj-metadata-getter.c b/libjuicer/sj-metadata-getter.c
index 4a55ecd..5e83b9f 100644
--- a/libjuicer/sj-metadata-getter.c
+++ b/libjuicer/sj-metadata-getter.c
@@ -22,6 +22,7 @@
 
 #include <glib-object.h>
 #include <glib/gi18n.h>
+#include "sj-structures.h"
 #include "sj-metadata-getter.h"
 #include "sj-metadata-marshal.h"
 #include "sj-metadata.h"
@@ -158,8 +159,10 @@ fire_signal_idle (SjMetadataGetterSignal *signal)
   g_signal_emit_by_name (G_OBJECT (signal->mdg), "metadata",
   			 signal->albums, signal->error);
 
-  /* This will kill the albums, as
-   * those belong to the metadata backend */
+  /* Kill the albums */
+  g_list_foreach (signal->albums, (GFunc)album_details_free, NULL);
+  g_list_free (signal->albums);
+
   if (signal->metadata)
     g_object_unref (signal->metadata);
   if (signal->error != NULL)
diff --git a/libjuicer/sj-metadata-gvfs.c b/libjuicer/sj-metadata-gvfs.c
index 4e34470..27382d0 100644
--- a/libjuicer/sj-metadata-gvfs.c
+++ b/libjuicer/sj-metadata-gvfs.c
@@ -35,7 +35,6 @@
 struct SjMetadataGvfsPrivate {
   char *cdrom;
   char *uri;
-  GList *albums;
 };
 
 #define GET_PRIVATE(o)  \
@@ -71,9 +70,10 @@ static GList *
 gvfs_list_albums (SjMetadata *metadata, char **url, GError **error)
 {
   SjMetadataGvfsPrivate *priv;
+  GList *albums = NULL;
   AlbumDetails *album;
   GError *my_error = NULL;
-  GFile *file;
+  GFile *file = NULL;
   GFileInfo *info;
   GFileEnumerator *e;
   guint i = 0;
@@ -84,8 +84,7 @@ gvfs_list_albums (SjMetadata *metadata, char **url, GError **error)
 
   if (priv->uri == NULL) {
     g_set_error (error, SJ_ERROR, SJ_ERROR_INTERNAL_ERROR, _("Cannot access CD"));
-    priv->albums = NULL;
-    return NULL;
+    goto bail;
   }
 
   file = g_file_new_for_uri (priv->uri);
@@ -139,18 +138,18 @@ gvfs_list_albums (SjMetadata *metadata, char **url, GError **error)
   }
   g_object_unref (e);
 
-  priv->albums = g_list_append (NULL, album);
+  albums = g_list_append (albums, album);
 
-  return priv->albums;
+  return albums;
 
 bail:
 
-  g_object_unref (file);
-  g_set_error (error, SJ_ERROR, SJ_ERROR_INTERNAL_ERROR, _("Cannot access CD: %s"), my_error->message);
-  g_error_free (my_error);
-  g_list_foreach (priv->albums, (GFunc)album_details_free, NULL);
-  g_list_free (priv->albums);
-  priv->albums = NULL;
+  if (file)
+    g_object_unref (file);
+  if (my_error) {
+    g_set_error (error, SJ_ERROR, SJ_ERROR_INTERNAL_ERROR, _("Cannot access CD: %s"), my_error->message);
+    g_error_free (my_error);
+  }
   return NULL;
 }
 
@@ -192,8 +191,7 @@ sj_metadata_gvfs_set_property (GObject *object, guint property_id,
 
   switch (property_id) {
   case PROP_DEVICE:
-    if (priv->cdrom)
-      g_free (priv->cdrom);
+    g_free (priv->cdrom);
     priv->cdrom = g_value_dup_string (value);
     priv->uri = device_to_cdda_uri (priv->cdrom);
     break;
@@ -212,8 +210,6 @@ sj_metadata_gvfs_finalize (GObject *object)
   SjMetadataGvfsPrivate *priv = SJ_METADATA_GVFS (object)->priv;
   g_free (priv->cdrom);
   g_free (priv->uri);
-  g_list_foreach (priv->albums, (GFunc)album_details_free, NULL);
-  g_list_free (priv->albums);
 }
 
 static void
diff --git a/src/sj-main.c b/src/sj-main.c
index e7a44ee..ac4fa12 100644
--- a/src/sj-main.c
+++ b/src/sj-main.c
@@ -1070,7 +1070,8 @@ gboolean cd_drive_exists (const char *device)
   monitor = brasero_medium_monitor_get_default ();
   drive = brasero_medium_monitor_get_drive (monitor, device);
   exists = (drive != NULL);
-  g_object_unref (drive);
+  if (exists)
+    g_object_unref (drive);
 
   return exists;
 }


Index: sound-juicer.spec
===================================================================
RCS file: /cvs/pkgs/rpms/sound-juicer/devel/sound-juicer.spec,v
retrieving revision 1.113
retrieving revision 1.114
diff -u -p -r1.113 -r1.114
--- sound-juicer.spec	13 Apr 2009 03:07:42 -0000	1.113
+++ sound-juicer.spec	7 May 2009 18:07:49 -0000	1.114
@@ -8,7 +8,7 @@
 Name:		sound-juicer
 Summary:	Clean and lean CD ripper
 Version:	2.26.1
-Release:	1%{?dist}
+Release:	2%{?dist}
 License:	GPLv2+
 Group:		Applications/Multimedia
 Source:		http://download.gnome.org/sources/sound-juicer/2.26/%{name}-%{version}.tar.bz2
@@ -16,6 +16,8 @@ URL:		http://www.burtonini.com/blog/comp
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 Requires:	cdparanoia
 
+Patch0:		sj-gvfs-crash-fix.patch
+
 Requires(pre): GConf2 >= %{gconf_version}
 Requires(post): GConf2 >= %{gconf_version}
 Requires(preun): GConf2 >= %{gconf_version}
@@ -44,6 +46,7 @@ GStreamer-based CD ripping tool. Saves a
 
 %prep
 %setup -q
+%patch0 -p1 -b .gvfs-crasher
 
 %build
 # work around a gstreamer problem where it
@@ -112,6 +115,9 @@ fi
 %{_mandir}/man1/*
 
 %changelog
+* Thu May 07 2009 Bastien Nocera <bnocera at redhat.com> 2.26.1-2
+- Fix gvfs metadata getter crasher (#498764)
+
 * Sun Apr 12 2009 Matthias Clasen <mclasen at redhat.com> - 2.26.1-1
 - Update to 2.26.1
 - See http://download.gnome.org/sources/sound-juicer/2.26/sound-juicer-2.26.1.news




More information about the scm-commits mailing list