diff --git a/ChangeLog b/ChangeLog index 0bc4b0944b..70016c9353 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-02-12 Tim-Philipp Müller + + Based on patch by: Jonathan Matthew + + * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_stream_init), + (gst_wavparse_stream_data): + Fix massive memory leak when operating in streaming mode due to + GST_BUFFER_MALLOCDATA() not being set on newly-created buffers. + Fixes #407057. + 2007-02-12 Stefan Kost * gst/avi/gstavidemux.c: (gst_avi_demux_class_init), diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c index e6a1448334..72f0e9440c 100644 --- a/gst/wavparse/gstwavparse.c +++ b/gst/wavparse/gstwavparse.c @@ -1319,12 +1319,10 @@ static GstFlowReturn gst_wavparse_parse_stream_init (GstWavParse * wav) { if (gst_adapter_available (wav->adapter) >= 12) { - GstBuffer *tmp = gst_buffer_new (); + GstBuffer *tmp; /* _take flushes the data */ - GST_BUFFER_DATA (tmp) = gst_adapter_take (wav->adapter, 12); - GST_BUFFER_SIZE (tmp) = 12; - + tmp = gst_adapter_take_buffer (wav->adapter, 12); GST_DEBUG ("Parsing wav header"); if (!gst_wavparse_parse_file_header (GST_ELEMENT (wav), tmp)) { return GST_FLOW_ERROR; @@ -1458,9 +1456,7 @@ iterate_adapter: return GST_FLOW_OK; } - buf = gst_buffer_new (); - GST_BUFFER_DATA (buf) = gst_adapter_take (wav->adapter, desired); - GST_BUFFER_SIZE (buf) = desired; + buf = gst_adapter_take_buffer (wav->adapter, desired); } else { if ((res = gst_pad_pull_range (wav->sinkpad, wav->offset, desired, &buf)) != GST_FLOW_OK)