Track which list (images or saved_images) each image is on so they can be

removed from the correct list when the total image count is reached. Fixes
crash reported by xlabai at tencent dot com.
This commit is contained in:
Nicholas Marriott
2026-04-27 13:09:07 +01:00
parent 61a7be0eab
commit fc6d94a9f8
3 changed files with 18 additions and 7 deletions

View File

@@ -53,14 +53,12 @@ image_log(struct image *im, const char* from, const char* fmt, ...)
static void
image_free(struct image *im)
{
struct screen *s = im->s;
image_log(im, __func__, NULL);
TAILQ_REMOVE(&all_images, im, all_entry);
all_images_count--;
TAILQ_REMOVE(&s->images, im, entry);
TAILQ_REMOVE(im->list, im, entry);
sixel_free(im->data);
free(im->fallback);
free(im);
@@ -137,7 +135,8 @@ image_store(struct screen *s, struct sixel_image *si)
image_fallback(&im->fallback, im->sx, im->sy);
image_log(im, __func__, NULL);
TAILQ_INSERT_TAIL(&s->images, im, entry);
im->list = &s->images;
TAILQ_INSERT_TAIL(im->list, im, entry);
TAILQ_INSERT_TAIL(&all_images, im, all_entry);
if (++all_images_count == MAX_IMAGE_COUNT)