gstreamer: parse: Make sure children are bins before recursing in
authorArun Raghavan <arun@asymptotic.io>
Fri, 13 Sep 2024 17:55:27 +0000 (13:55 -0400)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 23 Sep 2024 22:09:31 +0000 (22:09 +0000)
A deferred set of the form parentbin::childelement::pad works in the
non-deferred property setting path, but the deferred path assumes that all
non-root non-leaf children specify bins. We already have a bin check on the
root, so let's add one for other non-leaves to avoid a critical.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3806
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7561>

subprojects/gstreamer/gst/parse/grammar.y.in

index 4588cac83403124de0f1966c5ca55cf19a2b541c..57563d76932d0a847d7895ba17c8644851dae016 100644 (file)
@@ -370,6 +370,11 @@ static void gst_parse_add_delayed_set (GstElement *element, gchar *name, gchar *
     parent = gst_bin_get_by_name (GST_BIN_CAST (element), current[0]);
     current++;
     while (parent && current[0]) {
+      if (!GST_IS_BIN (parent)) {
+        GST_INFO ("Not recursing into non-bin child %s",
+            gst_object_get_name (GST_OBJECT (parent)));
+        break;
+      }
       child = gst_bin_get_by_name (GST_BIN (parent), current[0]);
       if (!child && current[1]) {
         char *sub_name = g_strjoinv ("::", &current[0]);