From bfd3eb47ec164b289c0da812817629236acdc43d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 8 May 2021 15:18:25 +0200 Subject: [PATCH] term: reset: fix reset of the VT struct MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Free buffers and strings 2. memset() the vt struct 3. re-initialize members that must not be zero We _could_ replace the memset() with explicit zeroing of all the members. It’s just that there’s a lot of arrays, so this is much easier. Closes #495 --- CHANGELOG.md | 3 +++ terminal.c | 11 +++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e074583b..c5a37d82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -81,6 +81,9 @@ resulting in PGO build failures. * Wrong colors in the 256-color cube (https://codeberg.org/dnkl/foot/issues/479). +* Memory leak triggered by “opening” an OSC-8 URI and then resetting + the terminal without closing the URI + (https://codeberg.org/dnkl/foot/issues/495). ### Security diff --git a/terminal.c b/terminal.c index 6ec37406..9704b891 100644 --- a/terminal.c +++ b/terminal.c @@ -1649,13 +1649,12 @@ term_reset(struct terminal *term, bool hard) term->scroll_region.start = 0; term->scroll_region.end = term->rows; - free(term->vt.osc.data); - memset(&term->vt, 0, sizeof(term->vt)); - term->vt.state = 0; /* GROUND */ - - term->vt.osc8.begin = (struct coord){-1, -1}; free(term->vt.osc8.uri); - term->vt.osc8.uri = NULL; + free(term->vt.osc.data); + + memset(&term->vt, 0, sizeof(term->vt)); + term->vt.state = 0; /* STATE_GROUND */ + term->vt.osc8.begin = (struct coord){-1, -1}; if (term->grid == &term->alt) { term->grid = &term->normal;