[PATCH weston 1/2] desktop-shell: Require a popup parent to be a shell surface

Dima Ryazanov dima at gmail.com
Wed Apr 8 11:51:57 PDT 2015


Currently, the shell crashes if the parent is not a shell surface. Instead,
send an error to the client.

Signed-off-by: Dima Ryazanov <dima at gmail.com>
---
 desktop-shell/shell.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index f7c928e..96aa8f3 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -3393,7 +3393,8 @@ add_popup_grab(struct shell_surface *shsurf,
 	parent = get_shell_surface(shsurf->parent);
 	top_surface = get_top_popup(shseat);
 	if (shell_surface_is_xdg_popup(shsurf) &&
-	    ((top_surface == NULL && !shell_surface_is_xdg_surface(parent)) ||
+	    (!parent ||
+	     (top_surface == NULL && !shell_surface_is_xdg_surface(parent)) ||
 	     (top_surface != NULL && parent != top_surface))) {
 		wl_resource_post_error(shsurf->owner->resource,
 				       XDG_POPUP_ERROR_NOT_THE_TOPMOST_POPUP,
@@ -4098,13 +4099,14 @@ create_xdg_popup(struct shell_client *owner, void *shell,
 {
 	struct shell_surface *shsurf, *parent_shsurf;
 
-	/* Verify that we are creating the top most popup when mapping,
-	 * as its not until then we know whether it was mapped as most
+	/* Verify that we are creating the topmost popup when mapping,
+	 * as it's not until then we know whether it was mapped as most
 	 * top level or not. */
 
 	parent_shsurf = get_shell_surface(parent);
-	if (!shell_surface_is_xdg_popup(parent_shsurf) &&
-	    !shell_surface_is_xdg_surface(parent_shsurf)) {
+	if (!parent_shsurf ||
+	    (!shell_surface_is_xdg_popup(parent_shsurf) &&
+	     !shell_surface_is_xdg_surface(parent_shsurf))) {
 		wl_resource_post_error(owner->resource,
 				       XDG_POPUP_ERROR_INVALID_PARENT,
 				       "xdg_popup parent was invalid");
-- 
2.1.0



More information about the wayland-devel mailing list