From 42f3e7f7ce3b8ef480cc168eb7177f6282c1e626 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 7 Jun 2026 14:41:27 +0000 Subject: [PATCH] Clear entire lines when removing from history or freeing. --- grid.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/grid.c b/grid.c index 0d1db844..20deb936 100644 --- a/grid.c +++ b/grid.c @@ -285,9 +285,8 @@ static void grid_free_line(struct grid *gd, u_int py) { free(gd->linedata[py].celldata); - gd->linedata[py].celldata = NULL; free(gd->linedata[py].extddata); - gd->linedata[py].extddata = NULL; + memset(&gd->linedata[py], 0, sizeof gd->linedata[py]); } /* Free several lines. */ @@ -332,9 +331,7 @@ void grid_destroy(struct grid *gd) { grid_free_lines(gd, 0, gd->hsize + gd->sy); - free(gd->linedata); - free(gd); } @@ -414,12 +411,14 @@ grid_collect_history(struct grid *gd, int all) void grid_remove_history(struct grid *gd, u_int ny) { - u_int yy; + u_int yy, start; if (ny > gd->hsize) return; + start = gd->hsize + gd->sy - ny; for (yy = 0; yy < ny; yy++) - grid_free_line(gd, gd->hsize + gd->sy - 1 - yy); + grid_free_line(gd, start + yy); + memset(&gd->linedata[start], 0, ny * sizeof *gd->linedata); gd->hsize -= ny; }