[PATCH weston 5/6] compositor: forbid sub-surface nesting loops

ppaalanen at gmail.com ppaalanen at gmail.com
Fri May 17 06:46:07 PDT 2013


From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

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 <pekka.paalanen at collabora.co.uk>
---
 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)) {
-- 
1.8.1.5



More information about the wayland-devel mailing list