summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libnm-core/nm-keyfile-utils.c19
-rw-r--r--libnm-core/nm-keyfile.c15
2 files changed, 25 insertions, 9 deletions
diff --git a/libnm-core/nm-keyfile-utils.c b/libnm-core/nm-keyfile-utils.c
index 21f8b07d70..bc9da61485 100644
--- a/libnm-core/nm-keyfile-utils.c
+++ b/libnm-core/nm-keyfile-utils.c
@@ -82,17 +82,22 @@ nm_keyfile_plugin_kf_get_##stype##_list (GKeyFile *kf, \
get_ctype list; \
const char *alias; \
GError *local = NULL; \
+ gsize l; \
\
- list = g_key_file_get_##stype##_list (kf, group, key, out_length, &local); \
+ list = g_key_file_get_##stype##_list (kf, group, key, &l, &local); \
if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { \
alias = nm_keyfile_plugin_get_alias_for_setting_name (group); \
if (alias) { \
g_clear_error (&local); \
- list = g_key_file_get_##stype##_list (kf, alias, key, out_length, &local); \
+ list = g_key_file_get_##stype##_list (kf, alias, key, &l, &local); \
} \
} \
+ nm_assert ((!local) != (!list)); \
if (local) \
g_propagate_error (error, local); \
+ if (!list) \
+ l = 0; \
+ NM_SET_OUT (out_length, l); \
return list; \
} \
\
@@ -188,15 +193,21 @@ nm_keyfile_plugin_kf_get_keys (GKeyFile *kf,
char **keys;
const char *alias;
GError *local = NULL;
+ gsize l;
- keys = g_key_file_get_keys (kf, group, out_length, &local);
+ keys = g_key_file_get_keys (kf, group, &l, &local);
if (g_error_matches (local, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) {
alias = nm_keyfile_plugin_get_alias_for_setting_name (group);
if (alias) {
g_clear_error (&local);
- keys = g_key_file_get_keys (kf, alias, out_length, error ? &local : NULL);
+ keys = g_key_file_get_keys (kf, alias, &l, error ? &local : NULL);
}
}
+ nm_assert ((!local) != (!keys));
+ if (!keys)
+ l = 0;
+ nm_assert (l == NM_PTRARRAY_LEN (keys));
+ NM_SET_OUT (out_length, l);
if (local)
g_propagate_error (error, local);
return keys;
diff --git a/libnm-core/nm-keyfile.c b/libnm-core/nm-keyfile.c
index 161b2fd501..b3c4cdd53b 100644
--- a/libnm-core/nm-keyfile.c
+++ b/libnm-core/nm-keyfile.c
@@ -2723,6 +2723,8 @@ read_setting (KeyfileReaderInfo *info)
gsize i, n_keys;
keys = g_key_file_get_keys (info->keyfile, info->group, &n_keys, NULL);
+ if (!keys)
+ n_keys = 0;
if (n_keys > 0) {
GHashTable *h = _nm_setting_gendata_hash (setting, TRUE);
@@ -2798,15 +2800,15 @@ static void
read_vpn_secrets (KeyfileReaderInfo *info, NMSettingVpn *s_vpn)
{
gs_strfreev char **keys = NULL;
- char **iter;
+ gsize i, n_keys;
- keys = nm_keyfile_plugin_kf_get_keys (info->keyfile, NM_KEYFILE_GROUP_VPN_SECRETS, NULL, NULL);
- for (iter = keys; *iter; iter++) {
+ keys = nm_keyfile_plugin_kf_get_keys (info->keyfile, NM_KEYFILE_GROUP_VPN_SECRETS, &n_keys, NULL);
+ for (i = 0; i < n_keys; i++) {
char *secret;
- secret = nm_keyfile_plugin_kf_get_string (info->keyfile, NM_KEYFILE_GROUP_VPN_SECRETS, *iter, NULL);
+ secret = nm_keyfile_plugin_kf_get_string (info->keyfile, NM_KEYFILE_GROUP_VPN_SECRETS, keys[i], NULL);
if (secret) {
- nm_setting_vpn_add_secret (s_vpn, *iter, secret);
+ nm_setting_vpn_add_secret (s_vpn, keys[i], secret);
g_free (secret);
}
}
@@ -2896,6 +2898,9 @@ nm_keyfile_read (GKeyFile *keyfile,
info.user_data = user_data;
groups = g_key_file_get_groups (keyfile, &length);
+ if (!groups)
+ length = 0;
+
for (i = 0; i < length; i++) {
/* Only read out secrets when needed */
if (!strcmp (groups[i], NM_KEYFILE_GROUP_VPN_SECRETS)) {