From 067abf67cd1f08f4d2692a6b42b8331264c75397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Br=C3=BCschweiler?= Date: Sat, 1 Sep 2012 16:03:05 +0200 Subject: [PATCH] workspaces: don't segfault on invalid move_surface_to_workspace request Also fixes the off-by-one in toytoolkit that exposed the issue. --- clients/window.c | 2 +- src/shell.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/clients/window.c b/clients/window.c index 472aabfd..4ddbd2f1 100644 --- a/clients/window.c +++ b/clients/window.c @@ -1704,7 +1704,7 @@ frame_menu_func(struct window *window, int index, void *data) break; case 3: /* move to workspace below */ display = window->display; - if (display->workspace < display->workspace_count) + if (display->workspace < display->workspace_count - 1) workspace_manager_move_surface(display->workspace_manager, window->surface, display->workspace + 1); diff --git a/src/shell.c b/src/shell.c index 6610927f..06d8684c 100644 --- a/src/shell.c +++ b/src/shell.c @@ -548,6 +548,7 @@ static struct workspace * get_workspace(struct desktop_shell *shell, unsigned int index) { struct workspace **pws = shell->workspaces.array.data; + assert(index < shell->workspaces.num); pws += index; return *pws; } @@ -849,6 +850,9 @@ move_surface_to_workspace(struct desktop_shell *shell, if (workspace == shell->workspaces.current) return; + if (workspace >= shell->workspaces.num) + workspace = shell->workspaces.num - 1; + from = get_current_workspace(shell); to = get_workspace(shell, workspace);