[PATCH] fix itdb_free crash

James Burton <[email protected]> Thu, 30 Jun 2011 09:29:15 +0100
Newsgroups gmane.comp.ipod.gtkpod
Message-ID <[email protected]>
Hi,

I hope this is the correct list for libgpod discussion.

I've seen a few libgpod crashes in itdb_free() which appear to be due to a 
double free of itdb->priv->genius_cuid.  Also I assume the check before the 
first g_free() can be removed since g_free does nothing if passed NULL.

Thanks,
James Burton


diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c
index 446e43f..8e47c26 100644
--- a/src/itdb_itunesdb.c
+++ b/src/itdb_itunesdb.c
@@ -1355,8 +1355,7 @@ void itdb_free (Itdb_iTunesDB *itdb)
 	            (GFunc)(itdb_playlist_free), NULL);
 	    }
 
-	    if (itdb->priv->genius_cuid)
-	        g_free(itdb->priv->genius_cuid);
+	    g_free(itdb->priv->genius_cuid);
 	}
 
 	g_list_free (itdb->playlists);
@@ -1367,7 +1366,6 @@ void itdb_free (Itdb_iTunesDB *itdb)
 	itdb_device_free (itdb->device);
 	if (itdb->userdata && itdb->userdata_destroy)
 	    (*itdb->userdata_destroy) (itdb->userdata);
-	g_free (itdb->priv->genius_cuid);
 	g_free (itdb->priv);
 	g_free (itdb);
     }

------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2

_______________________________________________
Gtkpod-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-devel
0001-Fix-a-crash-in-itdb_free.patch (application/octet-stream, 1 KB)
From 1a7d39aa9d8579eb40ec9f7108da2632cf2ba7f6 Mon Sep 17 00:00:00 2001
From: James Burton <[email protected]>
Date: Thu, 30 Jun 2011 09:18:07 +0100
Subject: [PATCH] Fix a crash in itdb_free

Double free of itdb->priv->genius_cui caused a crash
---
 src/itdb_itunesdb.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c
index 446e43f..8e47c26 100644
--- a/src/itdb_itunesdb.c
+++ b/src/itdb_itunesdb.c
@@ -1355,8 +1355,7 @@ void itdb_free (Itdb_iTunesDB *itdb)
 	            (GFunc)(itdb_playlist_free), NULL);
 	    }
 
-	    if (itdb->priv->genius_cuid)
-	        g_free(itdb->priv->genius_cuid);
+	    g_free(itdb->priv->genius_cuid);
 	}
 
 	g_list_free (itdb->playlists);
@@ -1367,7 +1366,6 @@ void itdb_free (Itdb_iTunesDB *itdb)
 	itdb_device_free (itdb->device);
 	if (itdb->userdata && itdb->userdata_destroy)
 	    (*itdb->userdata_destroy) (itdb->userdata);
-	g_free (itdb->priv->genius_cuid);
 	g_free (itdb->priv);
 	g_free (itdb);
     }
-- 
1.7.5.4