diff mbox series

monitor.c: Fix infinite loop in monitor's auto-complete

Message ID 20180213125143.23488-1-dgilbert@redhat.com
State New
Headers show
Series monitor.c: Fix infinite loop in monitor's auto-complete | expand

Commit Message

Dr. David Alan Gilbert Feb. 13, 2018, 12:51 p.m. UTC
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

Reported-by: Dimitris Karagkasidis <t.pagef.lt@gmail.com>
Fixes: 48fe86f6400574165979e0db6f5937ad487b6888
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 monitor.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Stefan Hajnoczi Feb. 16, 2018, 3:56 p.m. UTC | #1
On Tue, Feb 13, 2018 at 12:51:43PM +0000, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 

Please include the details of how to trigger this bug.  This helps
justify the patch as well as aiding anyone investigating/backporting the
same issue in the future.

Aside from that:
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Dr. David Alan Gilbert Feb. 16, 2018, 4:20 p.m. UTC | #2
* Dr. David Alan Gilbert (git) (dgilbert@redhat.com) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> Reported-by: Dimitris Karagkasidis <t.pagef.lt@gmail.com>
> Fixes: 48fe86f6400574165979e0db6f5937ad487b6888
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

Queued.

> ---
>  monitor.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/monitor.c b/monitor.c
> index 0c0faec0a4..bec484440f 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) {
> -- 
> 2.14.3
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
Dr. David Alan Gilbert Feb. 16, 2018, 4:23 p.m. UTC | #3
* Stefan Hajnoczi (stefanha@gmail.com) wrote:
> On Tue, Feb 13, 2018 at 12:51:43PM +0000, Dr. David Alan Gilbert (git) wrote:
> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> > 
> 
> Please include the details of how to trigger this bug.  This helps
> justify the patch as well as aiding anyone investigating/backporting the
> same issue in the future.

OK, I'll include Dimitris's:
   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'.

> Aside from that:
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

Thanks!

Dave

--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
diff mbox series

Patch

diff --git a/monitor.c b/monitor.c
index 0c0faec0a4..bec484440f 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) {