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 <pkrempa(a)redhat.com>
---
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++) {
--
2.44.0