elementfactory: Handle element factory loading failure in gst_element_factory_create_...
authorSebastian Dröge <sebastian@centricular.com>
Wed, 19 Oct 2022 10:33:39 +0000 (13:33 +0300)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 19 Oct 2022 12:09:45 +0000 (12:09 +0000)
In gst_element_factory_create_with_properties() it is a normal error
path so let's keep this consistent.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3226>

subprojects/gstreamer/gst/gstelementfactory.c

index b74a73b..b94b576 100644 (file)
@@ -573,11 +573,14 @@ gst_element_factory_create_valist (GstElementFactory * factory,
       GST_ELEMENT_FACTORY (gst_plugin_feature_load (GST_PLUGIN_FEATURE
           (factory)));
 
-  g_return_val_if_fail (newfactory != NULL, NULL);
-  g_return_val_if_fail (newfactory->type != G_TYPE_INVALID, NULL);
+  if (newfactory == NULL)
+    goto load_failed;
 
   factory = newfactory;
 
+  if (factory->type == G_TYPE_INVALID)
+    goto no_type;
+
   if (!first) {
     element =
         gst_element_factory_create_with_properties (factory, 0, NULL, NULL);
@@ -602,6 +605,19 @@ gst_element_factory_create_valist (GstElementFactory * factory,
 out:
   gst_object_unref (factory);
   return element;
+
+  /* ERRORS */
+load_failed:
+  {
+    GST_WARNING_OBJECT (factory, "loading plugin returned NULL!");
+    return NULL;
+  }
+no_type:
+  {
+    GST_WARNING_OBJECT (factory, "factory has no type");
+    gst_object_unref (factory);
+    return NULL;
+  }
 }
 
 /**