From 8bc1f0ddd5f2a015e8c70274257b0282b54ba6c7 Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Thu, 11 Jun 2026 18:32:14 +0200 Subject: [PATCH] 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 --- src/common/font.c | 8 ++++++++ src/scaled-buffer/scaled-font-buffer.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/common/font.c b/src/common/font.c index b307729c..b35ad92b 100644 --- a/src/common/font.c +++ b/src/common/font.c @@ -82,6 +82,7 @@ font_buffer_create(struct lab_data_buffer **buffer, int max_width, cairo_pattern_t *bg_pattern, double scale) { if (string_null_or_empty(text)) { + *buffer = NULL; return; } @@ -91,6 +92,13 @@ font_buffer_create(struct lab_data_buffer **buffer, int max_width, 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); if (!*buffer) { wlr_log(WLR_ERROR, "Failed to create font buffer"); diff --git a/src/scaled-buffer/scaled-font-buffer.c b/src/scaled-buffer/scaled-font-buffer.c index bb93fc67..7bbc6eb9 100644 --- a/src/scaled-buffer/scaled-font-buffer.c +++ b/src/scaled-buffer/scaled-font-buffer.c @@ -29,7 +29,7 @@ _create_buffer(struct scaled_buffer *scaled_buffer, double scale) &self->font, self->color, bg_pattern, scale); if (!buffer) { - wlr_log(WLR_ERROR, "font_buffer_create() failed"); + wlr_log(WLR_INFO, "font_buffer_create() failed"); } zfree_pattern(solid_bg_pattern);