rtprtxreceive: fix potential leak of old, unassociated, association requests
authorGeorge Kiagiadakis <george.kiagiadakis@collabora.com>
Tue, 28 Feb 2017 11:10:50 +0000 (13:10 +0200)
committerGeorge Kiagiadakis <george.kiagiadakis@collabora.com>
Wed, 1 Mar 2017 08:50:43 +0000 (10:50 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=722560

gst/rtpmanager/gstrtprtxreceive.c

index 91edda2..b99c0a3 100644 (file)
@@ -505,6 +505,23 @@ gst_rtp_rtx_receive_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
 
   rtx->last_time = GST_BUFFER_PTS (buffer);
 
+  if (g_hash_table_size (rtx->seqnum_ssrc1_map) > 0) {
+    GHashTableIter iter;
+    gpointer key, value;
+
+    g_hash_table_iter_init (&iter, rtx->seqnum_ssrc1_map);
+    while (g_hash_table_iter_next (&iter, &key, &value)) {
+      SsrcAssoc *assoc = value;
+
+      /* remove association request if it is too old */
+      if (GST_CLOCK_TIME_IS_VALID (rtx->last_time) &&
+          GST_CLOCK_TIME_IS_VALID (assoc->time) &&
+          assoc->time + ASSOC_TIMEOUT < rtx->last_time) {
+        g_hash_table_iter_remove (&iter);
+      }
+    }
+  }
+
   is_rtx =
       g_hash_table_lookup_extended (rtx->rtx_pt_map,
       GUINT_TO_POINTER (payload_type), NULL, NULL);