gstaggregator: fix event use after free
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Fri, 7 Apr 2017 09:19:43 +0000 (10:19 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 2 Dec 2017 15:10:26 +0000 (15:10 +0000)
https://bugzilla.gnome.org/show_bug.cgi?id=781017

libs/gst/base/gstaggregator.c

index 7e8c5be..d693541 100644 (file)
@@ -2351,17 +2351,12 @@ gst_aggregator_pad_event_func (GstPad * pad, GstObject * parent,
   }
 
   if (event) {
+    gboolean is_caps = (GST_EVENT_TYPE (event) == GST_EVENT_CAPS);
+
     if (!klass->sink_event (self, aggpad, event)) {
       /* Copied from GstPad to convert boolean to a GstFlowReturn in
        * the event handling func */
-      switch (GST_EVENT_TYPE (event)) {
-        case GST_EVENT_CAPS:
-          ret = GST_FLOW_NOT_NEGOTIATED;
-          break;
-        default:
-          ret = GST_FLOW_ERROR;
-          break;
-      }
+      ret = is_caps ? GST_FLOW_NOT_NEGOTIATED : GST_FLOW_ERROR;
     }
   }