From bf67f1c0b16c0de43b8a10cb53808dd62b0cdc04 Mon Sep 17 00:00:00 2001 From: "Dr. David Alan Gilbert" Date: Tue, 13 Feb 2018 12:51:43 +0000 Subject: monitor.c: Fix infinite loop in monitor's auto-complete The QEMU monitor enters an infinite loop when trying to auto-complete commands that accept only optional parameters. The commands currently affected by this issue are 'info registers' and 'info mtree'. Reported-by: Dimitris Karagkasidis Fixes: 48fe86f6400574165979e0db6f5937ad487b6888 Signed-off-by: Dr. David Alan Gilbert Message-Id: <20180213125143.23488-1-dgilbert@redhat.com> Reviewed-by: Stefan Hajnoczi Signed-off-by: Dr. David Alan Gilbert --- monitor.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'monitor.c') diff --git a/monitor.c b/monitor.c index 9a0d480c53..373bb8d1c3 100644 --- a/monitor.c +++ b/monitor.c @@ -3696,7 +3696,7 @@ static void monitor_find_completion_by_table(Monitor *mon, { const char *cmdname; int i; - const char *ptype, *str, *name; + const char *ptype, *old_ptype, *str, *name; const mon_cmd_t *cmd; BlockBackend *blk = NULL; @@ -3741,7 +3741,9 @@ static void monitor_find_completion_by_table(Monitor *mon, } } str = args[nb_args - 1]; - while (*ptype == '-' && ptype[1] != '\0') { + old_ptype = NULL; + while (*ptype == '-' && old_ptype != ptype) { + old_ptype = ptype; ptype = next_arg_type(ptype); } switch(*ptype) { -- cgit v1.2.1