From 7a14606b51499177f501a295881e8032beb9c06a Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 21 Mar 2013 17:16:24 +0100 Subject: midiparse: don't leak midi data --- gst/midi/midiparse.c | 6 ++++-- gst/midi/midiparse.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'gst/midi') diff --git a/gst/midi/midiparse.c b/gst/midi/midiparse.c index fd9c17a2c..56c482cbe 100644 --- a/gst/midi/midiparse.c +++ b/gst/midi/midiparse.c @@ -190,6 +190,7 @@ gst_midi_parse_finalize (GObject * object) midiparse = GST_MIDI_PARSE (object); g_object_unref (midiparse->adapter); + g_free (midiparse->data); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -806,6 +807,7 @@ gst_midi_parse_parse_song (GstMidiParse * midiparse) size = gst_adapter_available (midiparse->adapter); data = gst_adapter_take (midiparse->adapter, size); + midiparse->data = data; midiparse->tempo = DEFAULT_TEMPO; if (!find_midi_chunk (midiparse, data, size, &offset, &length)) @@ -840,13 +842,11 @@ gst_midi_parse_parse_song (GstMidiParse * midiparse) short_file: { GST_ERROR_OBJECT (midiparse, "not enough data"); - g_free (data); return GST_FLOW_ERROR; } invalid_format: { GST_ERROR_OBJECT (midiparse, "invalid format"); - g_free (data); return GST_FLOW_ERROR; } } @@ -1087,6 +1087,8 @@ gst_midi_parse_change_state (GstElement * element, GstStateChange transition) break; case GST_STATE_CHANGE_PAUSED_TO_READY: gst_adapter_clear (midiparse->adapter); + g_free (midiparse->data); + midiparse->data = NULL; break; case GST_STATE_CHANGE_READY_TO_NULL: break; diff --git a/gst/midi/midiparse.h b/gst/midi/midiparse.h index cc7b3796f..1381536bb 100644 --- a/gst/midi/midiparse.h +++ b/gst/midi/midiparse.h @@ -67,6 +67,7 @@ struct _GstMidiParse guint64 offset; GstAdapter *adapter; + guint8 *data; /* output data */ gboolean discont; -- cgit v1.2.1