diff options
| author | David Bremner <david@tethera.net> | 2021-03-06 09:49:33 -0400 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2021-03-13 09:01:51 -0400 |
| commit | 50092a03752180489ecc343eea93f0540c6a47af (patch) | |
| tree | b8b6b154bcc2fa8cedde4d331e9c62b72db1863f /lib/config.cc | |
| parent | 6d5deb76ca00fc2145aa9aaab6d3f87d2790020b (diff) | |
lib/config: free memory from traversing GKeyFile
This fixes a few small memory leaks.
Diffstat (limited to 'lib/config.cc')
| -rw-r--r-- | lib/config.cc | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/config.cc b/lib/config.cc index e6b660a9..6993e67f 100644 --- a/lib/config.cc +++ b/lib/config.cc @@ -338,7 +338,7 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch, GKeyFile *file) { notmuch_status_t status = NOTMUCH_STATUS_SUCCESS; - gchar **groups, **keys, *val; + gchar **groups = NULL, **keys, *val; if (notmuch->config == NULL) notmuch->config = _notmuch_string_map_create (notmuch); @@ -348,22 +348,29 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch, goto DONE; } - for (groups = g_key_file_get_groups (file, NULL); *groups; groups++) { - for (keys = g_key_file_get_keys (file, *groups, NULL, NULL); *keys; keys++) { - char *absolute_key = talloc_asprintf (notmuch, "%s.%s", *groups, *keys); - val = g_key_file_get_value (file, *groups, *keys, NULL); + groups = g_key_file_get_groups (file, NULL); + for (gchar **grp = groups; *grp; grp++) { + keys = g_key_file_get_keys (file, *grp, NULL, NULL); + for (gchar **keys_p = keys; *keys_p; keys_p++) { + char *absolute_key = talloc_asprintf (notmuch, "%s.%s", *grp, *keys_p); + val = g_key_file_get_value (file, *grp, *keys_p, NULL); if (! val) { status = NOTMUCH_STATUS_FILE_ERROR; goto DONE; } _notmuch_string_map_set (notmuch->config, absolute_key, val); + g_free (val); talloc_free (absolute_key); if (status) goto DONE; } + g_strfreev (keys); } DONE: + if (groups) + g_strfreev (groups); + return status; } |
