scene: ensure node cannot be reparented below itself

This commit is contained in:
Devin J. Pohly 2021-08-28 18:10:09 -05:00 committed by Simon Ser
parent a1d462fa81
commit 0f534e32e4

View File

@ -138,6 +138,13 @@ void wlr_scene_node_reparent(struct wlr_scene_node *node,
if (node->parent == new_parent) { if (node->parent == new_parent) {
return; return;
} }
/* Ensure that a node cannot become its own ancestor */
for (struct wlr_scene_node *ancestor = new_parent; ancestor != NULL;
ancestor = ancestor->parent) {
if (ancestor == node) {
return;
}
}
wl_list_remove(&node->state.link); wl_list_remove(&node->state.link);