[vlc-commits] ml: fix double free.

Francois Cartegnie git at videolan.org
Thu Jul 19 14:23:25 CEST 2012


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Thu Jul 19 13:53:23 2012 +0200| [bc88ea7a81030c681ae68e86f452d3aa8bcf8d22] | committer: Francois Cartegnie

ml: fix double free.

Double free was occuring on some psz_url when copying medias.
Might be caused by a double listing from the sql query.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=bc88ea7a81030c681ae68e86f452d3aa8bcf8d22
---

 include/vlc_media_library.h |   45 ++++++++++++++++++++++---------------------
 1 file changed, 23 insertions(+), 22 deletions(-)

diff --git a/include/vlc_media_library.h b/include/vlc_media_library.h
index 2529dd5..313f8a3 100644
--- a/include/vlc_media_library.h
+++ b/include/vlc_media_library.h
@@ -558,8 +558,8 @@ static inline void ml_FreePeople( ml_person_t *p_person )
     if( p_person == NULL )
         return;
     ml_FreePeople( p_person->p_next );
-    free( p_person->psz_name );
-    free( p_person->psz_role );
+    FREENULL( p_person->psz_name );
+    FREENULL( p_person->psz_role );
     free( p_person );
 }
 
@@ -570,16 +570,16 @@ static inline void ml_FreePeople( ml_person_t *p_person )
  */
 static inline void ml_FreeMediaContent( ml_media_t *p_media )
 {
-    free( p_media->psz_uri );
-    free( p_media->psz_title );
-    free( p_media->psz_orig_title );
-    free( p_media->psz_cover );
-    free( p_media->psz_comment );
-    free( p_media->psz_extra );
-    free( p_media->psz_genre );
-    free( p_media->psz_album );
-    free( p_media->psz_preview );
-    free( p_media->psz_language );
+    FREENULL( p_media->psz_uri );
+    FREENULL( p_media->psz_title );
+    FREENULL( p_media->psz_orig_title );
+    FREENULL( p_media->psz_cover );
+    FREENULL( p_media->psz_comment );
+    FREENULL( p_media->psz_extra );
+    FREENULL( p_media->psz_genre );
+    FREENULL( p_media->psz_album );
+    FREENULL( p_media->psz_preview );
+    FREENULL( p_media->psz_language );
     ml_FreePeople( p_media->p_people );
     p_media->b_sparse = true;
     p_media->i_id = 0;
@@ -721,37 +721,38 @@ static inline int ml_CopyMedia( ml_media_t *b, ml_media_t *a )
     b->i_bitrate = a->i_bitrate;
     b->i_samplerate = a->i_samplerate;
     b->i_bpm = a->i_bpm;
-    free( b->psz_uri );
+    FREENULL( b->psz_uri );
     if( a->psz_uri )
         b->psz_uri = strdup( a->psz_uri );
-    free( b->psz_title );
+    FREENULL( b->psz_title );
     if( a->psz_title )
         b->psz_title = strdup( a->psz_title );
-    free( b->psz_orig_title );
+    FREENULL( b->psz_orig_title );
     if( a->psz_orig_title )
         b->psz_orig_title = strdup( a->psz_orig_title );
-    free( b->psz_album );
+    FREENULL( b->psz_album );
     if( a->psz_album )
         b->psz_album = strdup( a->psz_album );
-    free( b->psz_cover );
+    FREENULL( b->psz_cover );
     if( a->psz_cover )
         b->psz_cover = strdup( a->psz_cover );
-    free( b->psz_genre );
+    FREENULL( b->psz_genre );
     if( a->psz_genre )
         b->psz_genre = strdup( a->psz_genre );
-    free( b->psz_comment );
+    FREENULL( b->psz_comment );
     if( a->psz_comment )
         b->psz_comment = strdup( a->psz_comment );
-    free( b->psz_extra );
+    FREENULL( b->psz_extra );
     if( a->psz_extra )
         b->psz_extra = strdup( a->psz_extra );
-    free( b->psz_preview );
+    FREENULL( b->psz_preview );
     if( a->psz_preview )
         b->psz_preview = strdup( a->psz_preview );
-    free( b->psz_language );
+    FREENULL( b->psz_language );
     if( a->psz_language )
         b->psz_language = strdup( a->psz_language );
     ml_FreePeople( b->p_people );
+    b->p_people = NULL;
     if( a->p_people )        ml_CopyPersons( &( b->p_people ), a->p_people );
     ml_UnlockMedia( b );
     ml_UnlockMedia( a );



More information about the vlc-commits mailing list