Patchwork qemu-sockets: Fix parsing of the inet option 'to'.

login
register
mail settings
Submitter Anthony PERARD
Date Nov. 8, 2012, 3:11 p.m.
Message ID <1352387501-21907-1-git-send-email-anthony.perard@citrix.com>
Download mbox | patch
Permalink /patch/197849/
State New
Headers show

Comments

Anthony PERARD - Nov. 8, 2012, 3:11 p.m.
Having a qemu command line argument like "-vnc 127.0.0.1:0,to=99" is broken.
This have been break with commit 879e45c72da1569e07fbbc6a1aa2a708ea796044.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

---
 qemu-sockets.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
Lei Li - Nov. 9, 2012, 2:54 a.m.
On 11/08/2012 11:11 PM, Anthony PERARD wrote:
> Having a qemu command line argument like "-vnc 127.0.0.1:0,to=99" is broken.
> This have been break with commit 879e45c72da1569e07fbbc6a1aa2a708ea796044.
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

I have the same problem, and it works on Fedora 16 after this patch.

Tested-by: Lei Li <lilei@linux.vnet.ibm.com>

>
> ---
>   qemu-sockets.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/qemu-sockets.c b/qemu-sockets.c
> index abcd791..11d3d32 100644
> --- a/qemu-sockets.c
> +++ b/qemu-sockets.c
> @@ -551,8 +551,9 @@ static InetSocketAddress *inet_parse(const char *str, Error **errp)
>       optstr = str + pos;
>       h = strstr(optstr, ",to=");
>       if (h) {
> -        if (1 != sscanf(str, "%d%n", &to, &pos) ||
> -            (str[pos] != '\0' && str[pos] != ',')) {
> +        h += 4;
> +        if (1 != sscanf(h, "%d%n", &to, &pos) ||
> +            (h[pos] != '\0' && h[pos] != ',')) {
>               error_setg(errp, "error parsing to= argument");
>               goto fail;
>           }
Paolo Bonzini - Nov. 9, 2012, 8:09 a.m.
Il 08/11/2012 16:11, Anthony PERARD ha scritto:
> Having a qemu command line argument like "-vnc 127.0.0.1:0,to=99" is broken.
> This have been break with commit 879e45c72da1569e07fbbc6a1aa2a708ea796044.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> ---
>  qemu-sockets.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/qemu-sockets.c b/qemu-sockets.c
> index abcd791..11d3d32 100644
> --- a/qemu-sockets.c
> +++ b/qemu-sockets.c
> @@ -551,8 +551,9 @@ static InetSocketAddress *inet_parse(const char *str, Error **errp)
>      optstr = str + pos;
>      h = strstr(optstr, ",to=");
>      if (h) {
> -        if (1 != sscanf(str, "%d%n", &to, &pos) ||
> -            (str[pos] != '\0' && str[pos] != ',')) {
> +        h += 4;
> +        if (1 != sscanf(h, "%d%n", &to, &pos) ||
> +            (h[pos] != '\0' && h[pos] != ',')) {
>              error_setg(errp, "error parsing to= argument");
>              goto fail;
>          }
> 

I was going to submit this exact same patch.  Thanks.

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

I added qemu-trivial to the Cc list.

Paolo
Markus Armbruster - Nov. 9, 2012, 10:44 a.m.
Anthony PERARD <anthony.perard@citrix.com> writes:

> Having a qemu command line argument like "-vnc 127.0.0.1:0,to=99" is broken.
> This have been break with commit 879e45c72da1569e07fbbc6a1aa2a708ea796044.
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
>
> ---
>  qemu-sockets.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/qemu-sockets.c b/qemu-sockets.c
> index abcd791..11d3d32 100644
> --- a/qemu-sockets.c
> +++ b/qemu-sockets.c
> @@ -551,8 +551,9 @@ static InetSocketAddress *inet_parse(const char *str, Error **errp)
>      optstr = str + pos;
>      h = strstr(optstr, ",to=");
>      if (h) {
> -        if (1 != sscanf(str, "%d%n", &to, &pos) ||
> -            (str[pos] != '\0' && str[pos] != ',')) {
> +        h += 4;
> +        if (1 != sscanf(h, "%d%n", &to, &pos) ||
> +            (h[pos] != '\0' && h[pos] != ',')) {

Since you're touching this line anyway, consider cleaning up the Yoda
comparison to sscanf(...) != 1

>              error_setg(errp, "error parsing to= argument");
>              goto fail;
>          }
Anthony PERARD - Nov. 9, 2012, 11:36 a.m.

Patch

diff --git a/qemu-sockets.c b/qemu-sockets.c
index abcd791..11d3d32 100644
--- a/qemu-sockets.c
+++ b/qemu-sockets.c
@@ -551,8 +551,9 @@  static InetSocketAddress *inet_parse(const char *str, Error **errp)
     optstr = str + pos;
     h = strstr(optstr, ",to=");
     if (h) {
-        if (1 != sscanf(str, "%d%n", &to, &pos) ||
-            (str[pos] != '\0' && str[pos] != ',')) {
+        h += 4;
+        if (1 != sscanf(h, "%d%n", &to, &pos) ||
+            (h[pos] != '\0' && h[pos] != ',')) {
             error_setg(errp, "error parsing to= argument");
             goto fail;
         }