compositor: send WL_SURFACE_ERROR_INVALID_SIZE for non-cursor surfaces

See the discussion at [1]: there's no easy way to fix libwayland-cursor
without a new API. Sending the error for other roles will prevent the
same client bug from appearing elsewhere.

[1]: https://gitlab.freedesktop.org/wayland/wayland/-/issues/194
This commit is contained in:
Simon Ser 2022-05-07 10:28:05 +02:00 committed by Isaac Freund
parent 1284f85da4
commit 18595000f3
1 changed files with 14 additions and 5 deletions

View File

@ -176,12 +176,21 @@ static void surface_finalize_pending(struct wlr_surface *surface) {
if (!pending->viewport.has_src &&
(pending->buffer_width % pending->scale != 0 ||
pending->buffer_height % pending->scale != 0)) {
// TODO: send WL_SURFACE_ERROR_INVALID_SIZE error once this issue is
// resolved:
// TODO: send WL_SURFACE_ERROR_INVALID_SIZE error to cursor surfaces
// once this issue is resolved:
// https://gitlab.freedesktop.org/wayland/wayland/-/issues/194
wlr_log(WLR_DEBUG, "Client bug: submitted a buffer whose size (%dx%d) "
"is not divisible by scale (%d)", pending->buffer_width,
pending->buffer_height, pending->scale);
if (!surface->role
|| strcmp(surface->role->name, "wl_pointer-cursor") == 0
|| strcmp(surface->role->name, "wp_tablet_tool-cursor") == 0) {
wlr_log(WLR_DEBUG, "Client bug: submitted a buffer whose size (%dx%d) "
"is not divisible by scale (%d)", pending->buffer_width,
pending->buffer_height, pending->scale);
} else {
wl_resource_post_error(surface->resource,
WL_SURFACE_ERROR_INVALID_SIZE,
"Buffer size (%dx%d) is not divisible by scale (%d)",
pending->buffer_width, pending->buffer_height, pending->scale);
}
}
if (pending->viewport.has_dst) {