From 626fcd1d9d9d24a6859048e97c1677f0b7fb8a79 Mon Sep 17 00:00:00 2001 From: 0riginaln0 <74508026+0riginaln0@users.noreply.github.com> Date: Thu, 14 May 2026 19:26:30 +0300 Subject: [PATCH 1/2] Fix memory issue: Do not free `cmd->arg` in `tcl_destroy` --- tcl.c | 1 - 1 file changed, 1 deletion(-) diff --git a/tcl.c b/tcl.c index b989c3c..864994d 100644 --- a/tcl.c +++ b/tcl.c @@ -587,7 +587,6 @@ void tcl_destroy(struct tcl* tcl) { struct tcl_cmd* cmd = tcl->cmds; tcl->cmds = tcl->cmds->next; tcl_free(cmd->name); - free(cmd->arg); free(cmd); } tcl_free(tcl->result); From 69a49b86533b154a9c8318f02e46ae2fa6027072 Mon Sep 17 00:00:00 2001 From: 0riginaln0 <74508026+0riginaln0@users.noreply.github.com> Date: Sat, 16 May 2026 20:49:55 +0300 Subject: [PATCH 2/2] don't free `cmd->arg` when the `cmd` is not `tcl_user_proc` --- tcl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tcl.c b/tcl.c index 864994d..909bea2 100644 --- a/tcl.c +++ b/tcl.c @@ -587,6 +587,7 @@ void tcl_destroy(struct tcl* tcl) { struct tcl_cmd* cmd = tcl->cmds; tcl->cmds = tcl->cmds->next; tcl_free(cmd->name); + if (cmd->fn == tcl_user_proc && cmd->arg) { tcl_free((tcl_value_t*)cmd->arg); } free(cmd); } tcl_free(tcl->result);