mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-24 21:16:15 +01:00
GWin32RegistryKey: Move assertions
While these assertions look right at the first glance, they actually crash the program. That's because GObject insists on initializing all construct-only properties to their default values, which results in g_win32_registry_key_set_property() being called multiple times with NULL string, once for each unset property. If "path" is actually set by the caller, a subsequent call to set "path-utf16" to NULL will fail an assertion, since absolute_path is already non-NULL. With assertions moved the set-to-NULL calls bail out before an assertion is made.
This commit is contained in:
parent
c93318953e
commit
8651bee90f
@ -2623,8 +2623,6 @@ g_win32_registry_key_set_property (GObject *object,
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_PATH:
|
||||
g_assert (priv->absolute_path_w == NULL);
|
||||
g_assert (priv->absolute_path == NULL);
|
||||
path = g_value_get_string (value);
|
||||
|
||||
if (path == NULL)
|
||||
@ -2635,20 +2633,21 @@ g_win32_registry_key_set_property (GObject *object,
|
||||
if (path_w == NULL)
|
||||
break;
|
||||
|
||||
g_free (priv->absolute_path_w);
|
||||
g_free (priv->absolute_path);
|
||||
/* Construct only */
|
||||
g_assert (priv->absolute_path_w == NULL);
|
||||
g_assert (priv->absolute_path == NULL);
|
||||
priv->absolute_path_w = path_w;
|
||||
priv->absolute_path = g_value_dup_string (value);
|
||||
break;
|
||||
|
||||
case PROP_PATH_UTF16:
|
||||
g_assert (priv->absolute_path_w == NULL);
|
||||
g_assert (priv->absolute_path == NULL);
|
||||
path_w = (gunichar2 *) g_value_get_pointer (value);
|
||||
|
||||
if (path_w == NULL)
|
||||
break;
|
||||
|
||||
/* Construct only */
|
||||
g_assert (priv->absolute_path_w == NULL);
|
||||
priv->absolute_path_w = g_wcsdup (path_w, -1);
|
||||
break;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user