basesink: fix a use after free case
authorFabrice Bellet <fabrice@bellet.info>
Wed, 30 Nov 2016 20:17:55 +0000 (21:17 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 22 Dec 2016 12:43:04 +0000 (14:43 +0200)
The event may be disposed while being pushed, so we make sure the
debug infrastructure won't use it after the gst_pad_push().

libs/gst/base/gstbasesink.c

index ac2390fcb65552a1b35ed17411e95fa54d3b2c85..c7d8596fd603c38a1f7df97375deb8c9a1104ff6 100644 (file)
@@ -4429,6 +4429,8 @@ gst_base_sink_send_event (GstElement * element, GstEvent * event)
   }
 
   if (forward) {
+    GST_DEBUG_OBJECT (basesink, "sending event %p %" GST_PTR_FORMAT, event,
+        event);
     result = gst_pad_push_event (pad, event);
   } else {
     /* not forwarded, unref the event */
@@ -4437,8 +4439,7 @@ gst_base_sink_send_event (GstElement * element, GstEvent * event)
 
   gst_object_unref (pad);
 
-  GST_DEBUG_OBJECT (basesink, "handled event %p %" GST_PTR_FORMAT ": %d", event,
-      event, result);
+  GST_DEBUG_OBJECT (basesink, "handled event: %d", result);
 
   return result;
 }