src/buffer.c: prevent creating invalid buffers

Testcase: set title of foot to an invisible string (here LTR)

First one works and correctly sets the title, 2nd one crashes
- printf "\x1b]0;\xe2\x80\x8e%s\x07" "some title"
- printf "\x1b]0;\xe2\x80\x8e%s\x07" ""

Reported-by: Domo via IRC
This commit is contained in:
Consolatis 2026-06-11 18:32:14 +02:00
parent d2349c15a7
commit 8bc1f0ddd5
2 changed files with 9 additions and 1 deletions

View file

@ -82,6 +82,7 @@ font_buffer_create(struct lab_data_buffer **buffer, int max_width,
cairo_pattern_t *bg_pattern, double scale) cairo_pattern_t *bg_pattern, double scale)
{ {
if (string_null_or_empty(text)) { if (string_null_or_empty(text)) {
*buffer = NULL;
return; return;
} }
@ -91,6 +92,13 @@ font_buffer_create(struct lab_data_buffer **buffer, int max_width,
height = computed_height; height = computed_height;
} }
if (height <= 0 || width <= 0) {
wlr_log(WLR_INFO, "Refusing to create invisible font buffer of %dx%d",
width, height);
*buffer = NULL;
return;
}
*buffer = buffer_create_cairo(width, height, scale); *buffer = buffer_create_cairo(width, height, scale);
if (!*buffer) { if (!*buffer) {
wlr_log(WLR_ERROR, "Failed to create font buffer"); wlr_log(WLR_ERROR, "Failed to create font buffer");

View file

@ -29,7 +29,7 @@ _create_buffer(struct scaled_buffer *scaled_buffer, double scale)
&self->font, self->color, bg_pattern, scale); &self->font, self->color, bg_pattern, scale);
if (!buffer) { if (!buffer) {
wlr_log(WLR_ERROR, "font_buffer_create() failed"); wlr_log(WLR_INFO, "font_buffer_create() failed");
} }
zfree_pattern(solid_bg_pattern); zfree_pattern(solid_bg_pattern);