config: use cleanup attribute for variables in init_sync()

Fixes leaks when we "return FALSE;" above. And in general,
don't use explicit free/unref it's error prone (Q.E.D.).

Fixes: c263f5355c
This commit is contained in:
Thomas Haller
2018-11-19 11:53:05 +01:00
committed by Beniamino Galvani
parent 446e5b27d6
commit d61d6e4276

View File

@@ -2755,10 +2755,12 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
{ {
NMConfig *self = NM_CONFIG (initable); NMConfig *self = NM_CONFIG (initable);
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (self); NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (self);
GKeyFile *keyfile, *keyfile_intern; gs_unref_keyfile GKeyFile *keyfile = NULL;
char *config_main_file = NULL; gs_unref_keyfile GKeyFile *keyfile_intern = NULL;
char *config_description = NULL; gs_free char *config_main_file = NULL;
gs_free char *config_description = NULL;
gs_strfreev char **no_auto_default = NULL; gs_strfreev char **no_auto_default = NULL;
gs_strfreev char **warnings = NULL;
gs_free char *configure_and_quit = NULL; gs_free char *configure_and_quit = NULL;
gboolean intern_config_needs_rewrite; gboolean intern_config_needs_rewrite;
const char *s; const char *s;
@@ -2790,12 +2792,12 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
priv->system_config_dir, priv->system_config_dir,
&config_main_file, &config_main_file,
&config_description, &config_description,
&priv->warnings, &warnings,
error); error);
if (!keyfile) if (!keyfile)
return FALSE; return FALSE;
/* Initialize read only private members */ /* Initialize read-only private members */
if (priv->cli.no_auto_default_file) if (priv->cli.no_auto_default_file)
priv->no_auto_default_file = g_strdup (priv->cli.no_auto_default_file); priv->no_auto_default_file = g_strdup (priv->cli.no_auto_default_file);
@@ -2841,12 +2843,7 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
keyfile_intern); keyfile_intern);
priv->config_data = g_object_ref (priv->config_data_orig); priv->config_data = g_object_ref (priv->config_data_orig);
priv->warnings = g_steal_pointer (&warnings);
g_free (config_main_file);
g_free (config_description);
g_key_file_unref (keyfile);
if (keyfile_intern)
g_key_file_unref (keyfile_intern);
return TRUE; return TRUE;
} }