From 849fd7a96f54521b8e6e4e8f14d4774f3b9ddffb Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Sun, 18 May 2025 00:07:48 +0900 Subject: [PATCH] scaled-scene-buffer: guard against negative sizes --- src/common/scaled-icon-buffer.c | 3 +++ src/common/scaled-img-buffer.c | 3 +++ src/common/scaled-rect-buffer.c | 6 ++++-- src/common/scaled-scene-buffer.c | 3 +++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/common/scaled-icon-buffer.c b/src/common/scaled-icon-buffer.c index cc4d6317..a96df609 100644 --- a/src/common/scaled-icon-buffer.c +++ b/src/common/scaled-icon-buffer.c @@ -79,6 +79,9 @@ struct scaled_icon_buffer * scaled_icon_buffer_create(struct wlr_scene_tree *parent, struct server *server, int width, int height) { + assert(parent); + assert(width >= 0 && height >= 0); + struct scaled_scene_buffer *scaled_buffer = scaled_scene_buffer_create( parent, &impl, /* drop_buffer */ true); struct scaled_icon_buffer *self = znew(*self); diff --git a/src/common/scaled-img-buffer.c b/src/common/scaled-img-buffer.c index 94465d7d..817e222c 100644 --- a/src/common/scaled-img-buffer.c +++ b/src/common/scaled-img-buffer.c @@ -49,7 +49,10 @@ struct scaled_img_buffer * scaled_img_buffer_create(struct wlr_scene_tree *parent, struct lab_img *img, int width, int height) { + assert(parent); assert(img); + assert(width >= 0 && height >= 0); + struct scaled_scene_buffer *scaled_buffer = scaled_scene_buffer_create( parent, &impl, /* drop_buffer */ true); struct scaled_img_buffer *self = znew(*self); diff --git a/src/common/scaled-rect-buffer.c b/src/common/scaled-rect-buffer.c index 9bb173ee..318176c4 100644 --- a/src/common/scaled-rect-buffer.c +++ b/src/common/scaled-rect-buffer.c @@ -95,14 +95,16 @@ struct scaled_rect_buffer *scaled_rect_buffer_create( /* TODO: support rounded corners for menus and OSDs */ assert(parent); + assert(width >= 0 && height >= 0); + struct scaled_rect_buffer *self = znew(*self); struct scaled_scene_buffer *scaled_buffer = scaled_scene_buffer_create( parent, &impl, /* drop_buffer */ true); scaled_buffer->data = self; self->scaled_buffer = scaled_buffer; self->scene_buffer = scaled_buffer->scene_buffer; - self->width = MAX(width, 1); - self->height = MAX(height, 1); + self->width = width; + self->height = height; self->border_width = border_width; memcpy(self->fill_color, fill_color, sizeof(self->fill_color)); memcpy(self->border_color, border_color, sizeof(self->border_color)); diff --git a/src/common/scaled-scene-buffer.c b/src/common/scaled-scene-buffer.c index 7b5d8c40..39ac44dc 100644 --- a/src/common/scaled-scene-buffer.c +++ b/src/common/scaled-scene-buffer.c @@ -227,6 +227,9 @@ scaled_scene_buffer_request_update(struct scaled_scene_buffer *self, int width, int height) { assert(self); + assert(width >= 0); + assert(height >= 0); + struct scaled_scene_buffer_cache_entry *cache_entry, *cache_entry_tmp; wl_list_for_each_safe(cache_entry, cache_entry_tmp, &self->cache, link) { _cache_entry_destroy(cache_entry, self->drop_buffer);