Prevent missing direction arguments to segfault labwc

Reported-by: @Flrian
This commit is contained in:
Consolatis 2022-06-03 02:19:31 +02:00 committed by Johan Malm
parent 0a7e380c14
commit 986ab70780
2 changed files with 20 additions and 2 deletions

View file

@ -174,10 +174,18 @@ actions_run(struct view *activator, struct server *server,
wl_display_terminate(server->wl_display); wl_display_terminate(server->wl_display);
break; break;
case ACTION_TYPE_MOVE_TO_EDGE: case ACTION_TYPE_MOVE_TO_EDGE:
view_move_to_edge(view, action->arg); if (action->arg) {
view_move_to_edge(view, action->arg);
} else {
wlr_log(WLR_ERROR, "Missing argument for MoveToEdge");
}
break; break;
case ACTION_TYPE_SNAP_TO_EDGE: case ACTION_TYPE_SNAP_TO_EDGE:
view_snap_to_edge(view, action->arg); if (action->arg) {
view_snap_to_edge(view, action->arg);
} else {
wlr_log(WLR_ERROR, "Missing argument for SnapToEdge");
}
break; break;
case ACTION_TYPE_NEXT_WINDOW: case ACTION_TYPE_NEXT_WINDOW:
server->cycle_view = desktop_cycle_view(server, server->cycle_view = desktop_cycle_view(server,

View file

@ -460,6 +460,10 @@ view_move_to_edge(struct view *view, const char *direction)
wlr_log(WLR_ERROR, "no output"); wlr_log(WLR_ERROR, "no output");
return; return;
} }
if (!direction) {
wlr_log(WLR_ERROR, "invalid edge");
return;
}
struct wlr_box usable = output_usable_area_in_layout_coords(output); struct wlr_box usable = output_usable_area_in_layout_coords(output);
if (usable.height == output->wlr_output->height if (usable.height == output->wlr_output->height
&& output->wlr_output->scale != 1) { && output->wlr_output->scale != 1) {
@ -485,6 +489,9 @@ view_move_to_edge(struct view *view, const char *direction)
x = view->x; x = view->x;
y = usable.y + usable.height - view->h - view->margin.bottom y = usable.y + usable.height - view->h - view->margin.bottom
- rc.gap; - rc.gap;
} else {
wlr_log(WLR_ERROR, "invalid edge");
return;
} }
view_move(view, x, y); view_move(view, x, y);
} }
@ -521,6 +528,9 @@ view_edge_invert(enum view_edge edge)
static enum view_edge static enum view_edge
view_edge_parse(const char *direction) view_edge_parse(const char *direction)
{ {
if (!direction) {
return VIEW_EDGE_INVALID;
}
if (!strcasecmp(direction, "left")) { if (!strcasecmp(direction, "left")) {
return VIEW_EDGE_LEFT; return VIEW_EDGE_LEFT;
} else if (!strcasecmp(direction, "up")) { } else if (!strcasecmp(direction, "up")) {