From 0b9b726bdfb573337de09489ae0750070aec219a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sun, 20 Mar 2022 16:31:44 +0100 Subject: [PATCH] vt: free OSC buffer after dispatch, if larger than 4K --- vt.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/vt.c b/vt.c index d496fcfe..a98188be 100644 --- a/vt.c +++ b/vt.c @@ -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