From 41400ac1dda55b817388a4050aa823051bda2e05 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 25 Apr 2024 10:05:42 +0200 Subject: [PATCH] vsh: cmdComplete: Don't leak buffer for completion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The buffer which we assign to the 'rl_line_buffer' variable of readline would be overwritten and thus leaked on multiple invocations of cmdComplete in one session. Free/clear it after it's used. Hitting this leak was until recenly possible only in non-interactive batch mode and recently also in interactive mode as 'complete' can be used multiple times now interactively. Fixes: a0e1ada63c0afdc2af3b9405cbf637d8bd28700c Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- tools/vsh.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/vsh.c b/tools/vsh.c index 2805574ec6..05de54b5b0 100644 --- a/tools/vsh.c +++ b/tools/vsh.c @@ -3439,7 +3439,10 @@ cmdComplete(vshControl *ctl, const vshCmd *cmd) * In our case it's at the end of the whole line. */ rl_point = strlen(rl_line_buffer); - if (!(matches = vshReadlineCompletion(arg, 0, 0))) + matches = vshReadlineCompletion(arg, 0, 0); + g_clear_pointer(&rl_line_buffer, g_free); + + if (!matches) return false; for (iter = matches; *iter; iter++) {