[pulseaudio-discuss] [PATCH v3 08/12] gsettings: check that children haven't been deleted before using them
Tanu Kaskinen
tanuk at iki.fi
Tue Apr 17 06:07:38 UTC 2018
According to the documentation of g_settings_list_children(), the listed
children may be removed at any time, so g_settings_get_child() may
return NULL. This is probably very unlikely to happen in practice, but
it's good to check anyway.
---
src/modules/gsettings/gsettings-helper.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/modules/gsettings/gsettings-helper.c b/src/modules/gsettings/gsettings-helper.c
index 51f61b009..3bd4b1bab 100644
--- a/src/modules/gsettings/gsettings-helper.c
+++ b/src/modules/gsettings/gsettings-helper.c
@@ -95,8 +95,14 @@ int main(int argc, char *argv[]) {
group_names = g_settings_list_children(settings);
for (name = group_names; *name; name++) {
- g_signal_connect(g_settings_get_child(settings, *name), "changed",
- (GCallback) module_group_callback, *name);
+ GSettings *child = g_settings_get_child(settings, *name);
+
+ /* The child may have been removed between the
+ * g_settings_list_children() and g_settings_get_child() calls. */
+ if (!child)
+ continue;
+
+ g_signal_connect(child, "changed", (GCallback) module_group_callback, *name);
handle_module_group(*name);
}
--
2.16.3
More information about the pulseaudio-discuss
mailing list