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 ab82b75b..f3513a08 100644 --- a/terminal.c +++ b/terminal.c @@ -1649,13 +1649,13 @@ 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); + + term->vt = (struct vt){ + .state = 0, /* STATE_GROUND */ + .osc8 = {.begin = (struct coord){-1, -1}}, + }; if (term->grid == &term->alt) { term->grid = &term->normal; @@ -3070,6 +3070,8 @@ term_osc8_open(struct terminal *term, uint64_t id, const char *uri) term_osc8_close(term); } + xassert(term->vt.osc8.uri == NULL); + term->vt.osc8.begin = (struct coord){ .col = term->grid->cursor.point.col, .row = grid_row_absolute(term->grid, term->grid->cursor.point.row),