frei0r: Make sure to only register plugins that have valid propert types
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 16 Jun 2009 19:27:38 +0000 (21:27 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 19 Jun 2009 09:03:16 +0000 (11:03 +0200)
gst/frei0r/gstfrei0r.c

index 28eeb11..f90f1d6 100644 (file)
@@ -424,6 +424,7 @@ register_plugin (GstPlugin * plugin, const gchar * filename)
   GModule *module;
   gboolean ret = FALSE;
   GstFrei0rFuncTable ftable = { NULL, };
+  gint i;
   f0r_plugin_info_t info = { NULL, };
 
   GST_DEBUG ("Registering plugin '%s'", filename);
@@ -476,6 +477,17 @@ register_plugin (GstPlugin * plugin, const gchar * filename)
     return FALSE;
   }
 
+  for (i = 0; i < info.num_params; i++) {
+    f0r_param_info_t pinfo = { NULL, };
+
+    ftable.get_param_info (&pinfo, i);
+    if (pinfo.type > F0R_PARAM_STRING) {
+      GST_WARNING ("Unsupported parameter type %d", pinfo.type);
+      g_module_close (module);
+      return FALSE;
+    }
+  }
+
   switch (info.plugin_type) {
     case F0R_PLUGIN_TYPE_FILTER:
       ret = gst_frei0r_filter_register (plugin, &info, &ftable);
@@ -491,6 +503,9 @@ register_plugin (GstPlugin * plugin, const gchar * filename)
       break;
   }
 
+  if (!ret)
+    goto invalid_frei0r_plugin;
+
   return ret;
 
 invalid_frei0r_plugin: