hlsdemux: Fix dereferencing of NULL pointer
authorAlex Ashley <bugzilla@ashley-family.net>
Thu, 26 Sep 2013 15:51:25 +0000 (16:51 +0100)
committerSebastian Dröge <slomo@circular-chaos.org>
Sat, 28 Sep 2013 11:14:01 +0000 (13:14 +0200)
On some live HLS streams, gst_hls_demux_switch_playlist causes
assertion failures because it tried to dereference a NULL fragment.
This is because g_queue_peek_tail sometimes was returning NULL and
this case was not being checked.

This patch does two things:
* move the g_queue_peek_tail inside the semaphore protection
* check if q_queue_peek_tail returns NULL

https://bugzilla.gnome.org/show_bug.cgi?id=708849

ext/hls/gsthlsdemux.c

index 235af1f..57f1043 100644 (file)
@@ -1213,11 +1213,12 @@ gst_hls_demux_switch_playlist (GstHLSDemux * demux)
   GstClockTime diff;
   gsize size;
   gint bitrate;
-  GstFragment *fragment = g_queue_peek_tail (demux->queue);
+  GstFragment *fragment;
   GstBuffer *buffer;
 
   GST_M3U8_CLIENT_LOCK (demux->client);
-  if (!demux->client->main->lists) {
+  fragment = g_queue_peek_tail (demux->queue);
+  if (!demux->client->main->lists || !fragment) {
     GST_M3U8_CLIENT_UNLOCK (demux->client);
     return TRUE;
   }