[glib] g_settings_schema_list: some fixes
- From: Ryan Lortie <desrt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] g_settings_schema_list: some fixes
- Date: Mon, 28 Oct 2013 16:44:17 +0000 (UTC)
commit 066df98849e890761a39361a4f5267ae3faa12b0
Author: Ryan Lortie <desrt desrt ca>
Date: Mon Oct 28 09:29:15 2013 -0700
g_settings_schema_list: some fixes
Prevent a crash in the case that gvdb_table_list() returns NULL (ie:
because a schema has no keys).
Stop a memory leak caused by pointlessly stealing keys from a hashtable
(after we quarked them already).
Stop allocating an extra entry at the end of an array for a terminator
(that we never wrote anyway) when all functions using this API refer to
the out-parameter length array.
https://bugzilla.gnome.org/show_bug.cgi?id=711016
gio/gsettingsschema.c | 16 ++++++++--------
1 files changed, 8 insertions(+), 8 deletions(-)
---
diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c
index b79d91a..fa9f9da 100644
--- a/gio/gsettingsschema.c
+++ b/gio/gsettingsschema.c
@@ -1012,10 +1012,13 @@ g_settings_schema_list (GSettingsSchema *schema,
list = gvdb_table_list (s->table, "");
- for (i = 0; list[i]; i++)
- g_hash_table_add (items, list[i]); /* transfer ownership */
+ if (list)
+ {
+ for (i = 0; list[i]; i++)
+ g_hash_table_add (items, list[i]); /* transfer ownership */
- g_free (list); /* free container only */
+ g_free (list); /* free container only */
+ }
}
/* Do a first pass to eliminate child items that do not map to
@@ -1076,15 +1079,12 @@ g_settings_schema_list (GSettingsSchema *schema,
/* Now create the list */
len = g_hash_table_size (items);
- schema->items = g_new (GQuark, len + 1);
+ schema->items = g_new (GQuark, len);
i = 0;
g_hash_table_iter_init (&iter, items);
while (g_hash_table_iter_next (&iter, &name, NULL))
- {
- schema->items[i++] = g_quark_from_string (name);
- g_hash_table_iter_steal (&iter);
- }
+ schema->items[i++] = g_quark_from_string (name);
schema->n_items = i;
g_assert (i == len);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]