term: reset: fix reset of the VT struct

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
This commit is contained in:
Daniel Eklöf 2021-05-08 15:18:25 +02:00
parent bd8c936b00
commit bfd3eb47ec
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 8 additions and 6 deletions

View file

@ -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

View file

@ -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;