From ae86043780df36d4dce8f38effd5023c4605b4ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sun, 7 Mar 2021 16:53:27 +0100 Subject: [PATCH] sixel: decgri: handle a repeat count of 0, by ignoring it --- sixel.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sixel.c b/sixel.c index 7c83edf9..2c440a6d 100644 --- a/sixel.c +++ b/sixel.c @@ -862,6 +862,9 @@ resize_horizontally(struct terminal *term, int new_width) int alloc_height = (height + 6 - 1) / 6 * 6; + xassert(new_width > 0); + xassert(alloc_height > 0); + /* Width (and thus stride) change - need to allocate a new buffer */ uint32_t *new_data = xmalloc(new_width * alloc_height * sizeof(uint32_t)); @@ -901,6 +904,9 @@ resize_vertically(struct terminal *term, int new_height) int alloc_height = (new_height + 6 - 1) / 6 * 6; + xassert(width > 0); + xassert(new_height > 0); + uint32_t *new_data = realloc( old_data, width * alloc_height * sizeof(uint32_t)); @@ -1167,11 +1173,14 @@ decgri(struct terminal *term, uint8_t c) case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': - case '~': - sixel_add_many(term, c - 63, term->sixel.param); + case '~': { + unsigned count = term->sixel.param; + if (likely(count > 0)) + sixel_add_many(term, c - 63, count); term->sixel.state = SIXEL_DECSIXEL; break; } + } } static void