vt: free OSC buffer after dispatch, if larger than 4K

This commit is contained in:
Daniel Eklöf 2022-03-20 16:31:44 +01:00
parent 1e63dddb89
commit 0b9b726bdf
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

15
vt.c
View file

@ -577,11 +577,20 @@ action_osc_start(struct terminal *term, uint8_t c)
static void
action_osc_end(struct terminal *term, uint8_t c)
{
if (!osc_ensure_size(term, term->vt.osc.idx + 1))
struct vt *vt = &term->vt;
if (!osc_ensure_size(term, vt->osc.idx + 1))
return;
term->vt.osc.data[term->vt.osc.idx] = '\0';
term->vt.osc.bel = c == '\a';
vt->osc.data[vt->osc.idx] = '\0';
vt->osc.bel = c == '\a';
osc_dispatch(term);
if (unlikely(vt->osc.idx >= 4096)) {
free(vt->osc.data);
vt->osc.data = NULL;
vt->osc.size = 0;
}
}
static void