From ea0c9b49ee0901fc82aef8fa24d7521700c9bb3b Mon Sep 17 00:00:00 2001 From: Mike Gorse Date: Fri, 5 May 2023 16:39:14 -0500 Subject: When parsing GetItems, guard against adding an object as its own child This can happen if a buggy application returns an accessible with itself as its parent. This can cause problems later if something recurses through an object's descendants (atspi_accessible_clear_cache for instance). Helps #113 --- atspi/atspi-misc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/atspi/atspi-misc.c b/atspi/atspi-misc.c index 11f37da2..fa6929b3 100644 --- a/atspi/atspi-misc.c +++ b/atspi/atspi-misc.c @@ -596,7 +596,14 @@ add_accessible_from_iter (DBusMessageIter *iter) parent = _atspi_dbus_consume_accessible (&iter_struct); if (accessible->accessible_parent) g_object_unref (accessible->accessible_parent); - accessible->accessible_parent = parent; + if (parent == accessible) + { + guint pid = atspi_accessible_get_process_id (accessible, NULL); + g_warning ("Process %d sent an accessible with itself as its parent. This shouldn't happen.", pid); + accessible->accessible_parent = NULL; + } + else + accessible->accessible_parent = parent; if (dbus_message_iter_get_arg_type (&iter_struct) == 'i') { -- cgit v1.2.1