vsh: cmdComplete: Don't leak buffer for completion

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: a0e1ada63c
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2024-04-25 10:05:42 +02:00
parent ac9c3c0b2c
commit 41400ac1dd

View File

@ -3439,7 +3439,10 @@ cmdComplete(vshControl *ctl, const vshCmd *cmd)
* In our case it's at the end of the whole line. */ * In our case it's at the end of the whole line. */
rl_point = strlen(rl_line_buffer); 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; return false;
for (iter = matches; *iter; iter++) { for (iter = matches; *iter; iter++) {