From 86c8ca03b5ab2bf6ed985f68ff064b9101fee58e Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Fri, 17 May 2013 16:46:07 +0300 Subject: [PATCH] compositor: forbid sub-surface nesting loops The only way to create a sub-surface loop by recursive nesting is to make the main surface (which does not have a role) a sub-surface of any of its sub-surfaces. All other cases should already be cought. This change checks for that exact case, and sends a protocol error. Signed-off-by: Pekka Paalanen --- src/compositor.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/compositor.c b/src/compositor.c index ed250ba..f67028e 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -2295,6 +2295,14 @@ subcompositor_get_subsurface(struct wl_client *client, return; } + if (weston_surface_get_main_surface(parent) == surface) { + wl_resource_post_error(resource, + WL_SUBCOMPOSITOR_ERROR_BAD_SURFACE, + "%s%d: wl_surface@%d is an ancestor of parent", + where, id, surface_resource->object.id); + return; + } + /* make sure the parent is in its own list */ if (wl_list_empty(&parent->subsurface_list)) { if (!weston_subsurface_create_for_parent(parent)) { -- 2.7.4