lame: Avoid crash when seeking before negotiating
authorThiago Santos <thiago.sousa.santos@collabora.co.uk>
Wed, 2 Dec 2009 14:21:22 +0000 (11:21 -0300)
committerThiago Santos <thiago.sousa.santos@collabora.co.uk>
Wed, 2 Dec 2009 14:34:34 +0000 (11:34 -0300)
lame's 'lgv' variable is only initialized when the caps
is negotiated, whenever a seek happens before that, it would
attempt to call a function on an empty pointer, causing the crash.

Fixes #603515

ext/lame/gstlame.c
ext/lame/gstlamemp3enc.c

index 1849fd2f72d9036f1ec54cf4ca192318b81f3454..934483967f5b48ab6ae4fcbb6030f19d9a38d234 100644 (file)
@@ -1024,11 +1024,13 @@ gst_lame_sink_event (GstPad * pad, GstEvent * event)
 
       GST_DEBUG_OBJECT (lame, "handling FLUSH stop event");
 
-      /* clear buffers */
-      mp3_buffer_size = 7200;
-      mp3_data = g_malloc (mp3_buffer_size);
-      lame_encode_flush (lame->lgf, mp3_data, mp3_buffer_size);
-      g_free (mp3_data);
+      if (lame->lgf) {
+        /* clear buffers if we already have lame set up */
+        mp3_buffer_size = 7200;
+        mp3_data = g_malloc (mp3_buffer_size);
+        lame_encode_flush (lame->lgf, mp3_data, mp3_buffer_size);
+        g_free (mp3_data);
+      }
 
       ret = gst_pad_push_event (lame->srcpad, event);
       break;
index 38b3b635f222355c8ff7d016c547123ed5c7a93e..876ad0a479727b21f4aaf8f90a333d829520ece9 100644 (file)
@@ -586,11 +586,13 @@ gst_lamemp3enc_sink_event (GstPad * pad, GstEvent * event)
 
       GST_DEBUG_OBJECT (lame, "handling FLUSH stop event");
 
-      /* clear buffers */
-      mp3_buffer_size = 7200;
-      mp3_data = g_malloc (mp3_buffer_size);
-      lame_encode_flush (lame->lgf, mp3_data, mp3_buffer_size);
-      g_free (mp3_data);
+      if (lame->lgf) {
+        /* clear buffers if we already have lame set up */
+        mp3_buffer_size = 7200;
+        mp3_data = g_malloc (mp3_buffer_size);
+        lame_encode_flush (lame->lgf, mp3_data, mp3_buffer_size);
+        g_free (mp3_data);
+      }
 
       ret = gst_pad_push_event (lame->srcpad, event);
       break;