aggregator: Ensure that the source pad is created as a GstAggregatorPad if no type...
authorSebastian Dröge <sebastian@centricular.com>
Tue, 13 Aug 2019 16:55:59 +0000 (19:55 +0300)
committerTim-Philipp Müller <tim@centricular.com>
Wed, 14 Aug 2019 12:35:31 +0000 (13:35 +0100)
Otherwise we would create a GstPad and that causes invalid memory
accesses later.

libs/gst/base/gstaggregator.c

index 06f362a..15672cf 100644 (file)
@@ -2430,6 +2430,7 @@ gst_aggregator_init (GstAggregator * self, GstAggregatorClass * klass)
 {
   GstPadTemplate *pad_template;
   GstAggregatorPrivate *priv;
+  GType pad_type;
 
   g_return_if_fail (klass->aggregate != NULL);
 
@@ -2449,7 +2450,13 @@ gst_aggregator_init (GstAggregator * self, GstAggregatorClass * klass)
   self->priv->peer_latency_max = self->priv->sub_latency_max = 0;
   self->priv->has_peer_latency = FALSE;
 
-  self->srcpad = gst_pad_new_from_template (pad_template, "src");
+  pad_type =
+      GST_PAD_TEMPLATE_GTYPE (pad_template) ==
+      G_TYPE_NONE ? GST_TYPE_AGGREGATOR_PAD :
+      GST_PAD_TEMPLATE_GTYPE (pad_template);
+  self->srcpad =
+      g_object_new (pad_type, "name", "src", "direction", GST_PAD_SRC,
+      "template", pad_template, NULL);
 
   gst_aggregator_reset_flow_values (self);