aboutsummaryrefslogtreecommitdiff
path: root/sway/tree
diff options
context:
space:
mode:
authormwenzkowski <29407878+mwenzkowski@users.noreply.github.com>2018-12-21 23:25:07 +0100
committeremersion <contact@emersion.fr>2019-01-28 16:14:35 +0100
commit7c27d73b02a1958f323a7c30f46c99414cd6f6bf (patch)
tree44b7f0cd093a14c776ad4781d41cdc36f5e64efd /sway/tree
parent6b8bf10941ec83ac7a6e364b9c34f8c6f74d814a (diff)
Check xdg_surface's role before using its toplevel
Don't access xdg_surface->toplevel if xdg_surface->role is equal to WLR_XDG_SURFACE_ROLE_NONE, since this could lead to crash. The same checks are added for xdg_surface_v6. Fixes #3311
Diffstat (limited to 'sway/tree')
-rw-r--r--sway/tree/container.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sway/tree/container.c b/sway/tree/container.c
index e20e44d4..0415d63c 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -341,7 +341,7 @@ static bool surface_is_popup(struct wlr_surface *surface) {
if (wlr_surface_is_xdg_surface(surface)) {
struct wlr_xdg_surface *xdg_surface =
wlr_xdg_surface_from_wlr_surface(surface);
- while (xdg_surface) {
+ while (xdg_surface && xdg_surface->role != WLR_XDG_SURFACE_ROLE_NONE) {
if (xdg_surface->role == WLR_XDG_SURFACE_ROLE_POPUP) {
return true;
}
@@ -353,7 +353,8 @@ static bool surface_is_popup(struct wlr_surface *surface) {
if (wlr_surface_is_xdg_surface_v6(surface)) {
struct wlr_xdg_surface_v6 *xdg_surface_v6 =
wlr_xdg_surface_v6_from_wlr_surface(surface);
- while (xdg_surface_v6) {
+ while (xdg_surface_v6 &&
+ xdg_surface_v6->role != WLR_XDG_SURFACE_V6_ROLE_NONE) {
if (xdg_surface_v6->role == WLR_XDG_SURFACE_V6_ROLE_POPUP) {
return true;
}