gparam: fix memory leak in g_param_value_defaults()

We cannot  just call

    G_PARAM_SPEC_GET_CLASS (pspec)->value_set_default (pspec, &dflt_value);

without initializing the GValue first. It would call
param_string_set_default(), which would set the pointer value
to a cloned string (which later never gets released, because
the GValue is not known to hold a string).

Fixes: 6ad799ac67
This commit is contained in:
Thomas Haller 2019-11-08 21:23:01 +01:00
parent b43bfcaa68
commit 3a9bdcf704

View File

@ -640,6 +640,7 @@ g_param_value_defaults (GParamSpec *pspec,
g_return_val_if_fail (G_IS_VALUE (value), FALSE); g_return_val_if_fail (G_IS_VALUE (value), FALSE);
g_return_val_if_fail (PSPEC_APPLIES_TO_VALUE (pspec, value), FALSE); g_return_val_if_fail (PSPEC_APPLIES_TO_VALUE (pspec, value), FALSE);
g_value_init (&dflt_value, G_PARAM_SPEC_VALUE_TYPE (pspec));
G_PARAM_SPEC_GET_CLASS (pspec)->value_set_default (pspec, &dflt_value); G_PARAM_SPEC_GET_CLASS (pspec)->value_set_default (pspec, &dflt_value);
defaults = G_PARAM_SPEC_GET_CLASS (pspec)->values_cmp (pspec, value, &dflt_value) == 0; defaults = G_PARAM_SPEC_GET_CLASS (pspec)->values_cmp (pspec, value, &dflt_value) == 0;
g_value_unset (&dflt_value); g_value_unset (&dflt_value);