tools/vsh.c | 3 +++ 1 file changed, 3 insertions(+)
Thing about vshReadlineInit() is - it's called multiple times.
The first time from vshInit(), when @ctl was filled only
partially (most notably, before any argv parsing is done, hence
ctl->imode is set to false). The second time after argv parsing,
from virshInit() -> vshInitReload(). In here, ctl->imode might
have changed and thus vshReadlineInit() can't exit early - it
needs to set up stuff for interactive mode (history basically).
To allow vshReadlineInit() to be called again,
vshReadlineDeinit() must set @autoCompleteOpaque to NULL.
Fixes: cab1e71f0161fd24c5d6ff4c379d3a242ea8c2d9
Resolves: https://issues.redhat.com/browse/RHEL-53560
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
tools/vsh.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tools/vsh.c b/tools/vsh.c
index 9fbb1f9349..5f5e2f281d 100644
--- a/tools/vsh.c
+++ b/tools/vsh.c
@@ -3040,6 +3040,9 @@ vshReadlineDeinit(vshControl *ctl)
g_clear_pointer(&ctl->historydir, g_free);
g_clear_pointer(&ctl->historyfile, g_free);
+
+ /* Allow vshReadlineInit() to be called again. */
+ autoCompleteOpaque = NULL;
}
char *
--
2.44.2
On Thu, Aug 08, 2024 at 14:49:12 +0200, Michal Privoznik wrote: > Thing about vshReadlineInit() is - it's called multiple times. > The first time from vshInit(), when @ctl was filled only > partially (most notably, before any argv parsing is done, hence > ctl->imode is set to false). The second time after argv parsing, > from virshInit() -> vshInitReload(). In here, ctl->imode might > have changed and thus vshReadlineInit() can't exit early - it > needs to set up stuff for interactive mode (history basically). > > To allow vshReadlineInit() to be called again, > vshReadlineDeinit() must set @autoCompleteOpaque to NULL. > > Fixes: cab1e71f0161fd24c5d6ff4c379d3a242ea8c2d9 > Resolves: https://issues.redhat.com/browse/RHEL-53560 > Signed-off-by: Michal Privoznik <mprivozn@redhat.com> > --- > tools/vsh.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/tools/vsh.c b/tools/vsh.c > index 9fbb1f9349..5f5e2f281d 100644 > --- a/tools/vsh.c > +++ b/tools/vsh.c > @@ -3040,6 +3040,9 @@ vshReadlineDeinit(vshControl *ctl) > > g_clear_pointer(&ctl->historydir, g_free); > g_clear_pointer(&ctl->historyfile, g_free); > + > + /* Allow vshReadlineInit() to be called again. */ > + autoCompleteOpaque = NULL; > } > > char * Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
© 2016 - 2024 Red Hat, Inc.