[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xine-cvslog
Subject:    [xine-cvs] =?utf-8?q?HG=3A_xine-lib-1=2E2=3A_demux=5Fmpgaudio=3A_?= =?utf-8?q?fix_leaks?=
From:       Petri_Hintukainen via Xine-cvslog <xine-cvslog () lists ! sourceforge ! net
Date:       2017-09-29 13:56:01
Message-ID: 3dd6b9c4df1b9f1b9cb9.1506693203 () hg ! debian ! org
[Download RAW message or body]

# HG changeset patch
# User Petri Hintukainen <phintuka@users.sourceforge.net>
# Date 1506693203 -10800
# Node ID 3dd6b9c4df1b9f1b9cb91d522de214e366523717
# Branch  default
# Parent  c27ade191aec1355143ceb10e0971f6a7ff5f690
demux_mpgaudio: fix leaks

diff --git a/src/demuxers/demux_mpgaudio.c b/src/demuxers/demux_mpgaudio.c
--- a/src/demuxers/demux_mpgaudio.c
+++ b/src/demuxers/demux_mpgaudio.c
@@ -427,6 +427,16 @@
  * Parse a Vbri header
  * return the Vbri header or NULL on error
  */
+
+static void _free_vbri_header(vbri_header_t **pp)
+{
+  if (*pp) {
+    vbri_header_t *p = *pp;
+    _x_freep(p->toc);
+    _x_freep(pp);
+  }
+}
+
 static vbri_header_t *XINE_MALLOC parse_vbri_header(mpg_audio_frame_t *frame,
 						    uint8_t *buf, int bufsize) {
 
@@ -601,6 +611,7 @@
   if (this->check_vbr_header) {
     this->check_vbr_header = 0;
     this->mpg_frame_start = frame_pos;
+    free(this->xing_header);
     this->xing_header = parse_xing_header(&this->cur_frame, buf->content, this->cur_frame.size);
     if (this->xing_header) {
       buf->free_buffer(buf);
@@ -608,6 +619,7 @@
               LOG_MODULE ": found Xing header at offset %"PRId64"\n", frame_pos);
       return 1;
     }
+    _free_vbri_header(&this->vbri_header);
     this->vbri_header = parse_vbri_header(&this->cur_frame, buf->content, this->cur_frame.size);
     if (this->vbri_header) {
       buf->free_buffer(buf);
@@ -1156,6 +1168,15 @@
   return DEMUX_OPTIONAL_UNSUPPORTED;
 }
 
+static void demux_mpgaudio_dispose (demux_plugin_t *this_gen) {
+
+  demux_mpgaudio_t *this = (demux_mpgaudio_t *) this_gen;
+
+  _free_vbri_header(&this->vbri_header);
+  _x_freep(&this->xing_header);
+  free(this);
+}
+
 static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *stream,
                                     input_plugin_t *input) {
 
@@ -1186,7 +1207,7 @@
   this->demux_plugin.send_headers      = demux_mpgaudio_send_headers;
   this->demux_plugin.send_chunk        = demux_mpgaudio_send_chunk;
   this->demux_plugin.seek              = demux_mpgaudio_seek;
-  this->demux_plugin.dispose           = default_demux_plugin_dispose;
+  this->demux_plugin.dispose           = demux_mpgaudio_dispose;
   this->demux_plugin.get_status        = demux_mpgaudio_get_status;
   this->demux_plugin.get_stream_length = demux_mpgaudio_get_stream_length;
   this->demux_plugin.get_capabilities  = demux_mpgaudio_get_capabilities;

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Xine-cvslog mailing list
Xine-cvslog@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xine-cvslog
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic