On 05/27/2012 09:25 PM, John Stebbins wrote:
> It is not necessary to test *any* pointer for null before calling free. It is 
> safe to call free on a null pointer.

of course, you're right
>From 8f5317941fb147712b024665096afb793a01a283 Mon Sep 17 00:00:00 2001
From: Ferdinand Holzer <[email protected]>
Date: Sun, 27 May 2012 21:42:51 +0200
Subject: [PATCH] Fixed memory leak in mpls parsing

audio_ref's weren't freed in _clean_stn.
bd handle wasn't closed in list_titles example.
---
 src/examples/list_titles.c       |    1 +
 src/libbluray/bdnav/mpls_parse.c |    8 ++++++++
 2 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/examples/list_titles.c b/src/examples/list_titles.c
index a987951..14679f7 100644
--- a/src/examples/list_titles.c
+++ b/src/examples/list_titles.c
@@ -96,5 +96,6 @@ int main(int argc, char *argv[])
         );
         bd_free_title_info(ti);
     }
+    bd_close(bd);
     return 0;
 }
diff --git a/src/libbluray/bdnav/mpls_parse.c b/src/libbluray/bdnav/mpls_parse.c
index 5c83532..29032e5 100644
--- a/src/libbluray/bdnav/mpls_parse.c
+++ b/src/libbluray/bdnav/mpls_parse.c
@@ -401,6 +401,14 @@ _parse_stn(BITSTREAM *bits, MPLS_STN *stn)
 static void
 _clean_stn(MPLS_STN *stn)
 {
+    if(stn->secondary_audio) {
+        X_FREE(stn->secondary_audio->sa_primary_audio_ref);
+    }
+    if(stn->secondary_video) {
+        X_FREE(stn->secondary_video->sv_secondary_audio_ref);
+        X_FREE(stn->secondary_video->sv_pip_pg_ref);
+    }
+    
     X_FREE(stn->video);
     X_FREE(stn->audio);
     X_FREE(stn->pg);
-- 
1.7.7

_______________________________________________
libbluray-devel mailing list
[email protected]
http://mailman.videolan.org/listinfo/libbluray-devel

Reply via email to