From 497f25de57944d5074b0d65c62be168c1b6ffeae Mon Sep 17 00:00:00 2001 From: Dima Ryazanov Date: Wed, 8 Apr 2015 11:51:57 -0700 Subject: [PATCH] desktop-shell: Require a popup parent to be a shell surface Currently, the shell crashes if the parent is not a shell surface. Instead, send an error to the client. Signed-off-by: Dima Ryazanov Reviewed-by: Pekka Paalanen --- 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 f7c928e7..96aa8f37 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");