From c3e59b071fe2d3a5582d362bca90c97976dfcb5f Mon Sep 17 00:00:00 2001 From: Jehan Date: Thu, 19 Oct 2023 23:34:47 +0200 Subject: [PATCH] libgimp: allowing NULL passed as value to a GimpObjectArray PDB argument. A NULL will be transformed into an array of size 0. --- libgimp/gimpgpparams-body.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/libgimp/gimpgpparams-body.c b/libgimp/gimpgpparams-body.c index ff5e44fbdb..2dad1e979f 100644 --- a/libgimp/gimpgpparams-body.c +++ b/libgimp/gimpgpparams-body.c @@ -553,6 +553,7 @@ static void gimp_gp_param_to_value (gpointer gimp, const GPParam *param, GType type, + GParamSpec *pspec, GValue *value) { g_return_if_fail (param != NULL); @@ -652,7 +653,15 @@ gimp_gp_param_to_value (gpointer gimp, GObject **objects; gint i; - object_type = g_type_from_name (param->data.d_id_array.type_name); + if (param->data.d_id_array.type_name == NULL) + { + g_return_if_fail (param->data.d_id_array.size == 0 && pspec != NULL); + object_type = GIMP_PARAM_SPEC_OBJECT_ARRAY (pspec)->object_type; + } + else + { + object_type = g_type_from_name (param->data.d_id_array.type_name); + } objects = g_new (GObject *, param->data.d_id_array.size); @@ -732,8 +741,9 @@ _gimp_gp_params_to_value_array (gpointer gimp, for (i = 0; i < n_params; i++) { - GValue value = G_VALUE_INIT; - GType type; + GParamSpec *pspec = NULL; + GValue value = G_VALUE_INIT; + GType type; /* first get the GType from the passed GPParam */ type = g_type_from_name (params[i].type_name); @@ -754,6 +764,8 @@ _gimp_gp_params_to_value_array (gpointer gimp, { GType pspec_type = G_PARAM_SPEC_VALUE_TYPE (pspecs[pspec_index]); + pspec = pspecs[pspec_index]; + if (type != pspec_type) { if (g_type_is_a (pspec_type, type)) @@ -786,7 +798,7 @@ _gimp_gp_params_to_value_array (gpointer gimp, } } - gimp_gp_param_to_value (gimp, ¶ms[i], type, &value); + gimp_gp_param_to_value (gimp, ¶ms[i], type, pspec, &value); gimp_value_array_append (args, &value); g_value_unset (&value);