mpegtsdemux: catch prev-not-found when inserting in the group list
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Wed, 9 Apr 2014 13:13:46 +0000 (14:13 +0100)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Wed, 9 Apr 2014 13:13:46 +0000 (14:13 +0100)
While this probably should never happen if callers are well behaved,
this avoids a crash if it does. With a warning about it. Unsure if
it'd be better to not add at all, but it should not happen...

Coverity 1139713

gst/mpegtsdemux/mpegtspacketizer.c

index 4b7f07b..088028c 100644 (file)
@@ -1720,12 +1720,18 @@ _insert_group_after (MpegTSPCR * pcrtable, PCROffsetGroup * group,
         break;
       }
     }
-    toinsert = g_list_append (NULL, group);
-    toinsert->next = nextlist;
-    toinsert->prev = prevlist;
-    prevlist->next = toinsert;
-    if (nextlist)
-      nextlist->prev = toinsert;
+    if (!prevlist) {
+      /* The non NULL prev given isn't in the list */
+      GST_WARNING ("Request to insert before a group which isn't in the list");
+      pcrtable->groups = g_list_prepend (pcrtable->groups, group);
+    } else {
+      toinsert = g_list_append (NULL, group);
+      toinsert->next = nextlist;
+      toinsert->prev = prevlist;
+      prevlist->next = toinsert;
+      if (nextlist)
+        nextlist->prev = toinsert;
+    }
   }
 }