diff mbox

[for-2.9,1/2] qapi: Fix string input visitor regression for empty lists

Message ID 1490026424-11330-2-git-send-email-armbru@redhat.com
State New
Headers show

Commit Message

Markus Armbruster March 20, 2017, 4:13 p.m. UTC
Visiting a list when input is the empty string should result in an
empty list, not an error.  Noticed when commit 3d089ce belatedly added
tests, but simply accepted as weird then.  It's actually a regression:
broken in commit 74f24cb, v2.7.0.  Fix it, and throw in another test
case for empty string.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 qapi/string-input-visitor.c       |  4 ++++
 tests/test-string-input-visitor.c | 11 ++++++++---
 2 files changed, 12 insertions(+), 3 deletions(-)

Comments

Michael Roth March 20, 2017, 9:04 p.m. UTC | #1
Quoting Markus Armbruster (2017-03-20 11:13:43)
> Visiting a list when input is the empty string should result in an
> empty list, not an error.  Noticed when commit 3d089ce belatedly added
> tests, but simply accepted as weird then.  It's actually a regression:
> broken in commit 74f24cb, v2.7.0.  Fix it, and throw in another test
> case for empty string.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com>

> ---
>  qapi/string-input-visitor.c       |  4 ++++
>  tests/test-string-input-visitor.c | 11 ++++++++---
>  2 files changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/qapi/string-input-visitor.c b/qapi/string-input-visitor.c
> index 806b01ae..c089491 100644
> --- a/qapi/string-input-visitor.c
> +++ b/qapi/string-input-visitor.c
> @@ -54,6 +54,10 @@ static int parse_str(StringInputVisitor *siv, const char *name, Error **errp)
>          return 0;
>      }
> 
> +    if (!*str) {
> +        return 0;
> +    }
> +
>      do {
>          errno = 0;
>          start = strtoll(str, &endptr, 0);
> diff --git a/tests/test-string-input-visitor.c b/tests/test-string-input-visitor.c
> index 6db850b..79313a7 100644
> --- a/tests/test-string-input-visitor.c
> +++ b/tests/test-string-input-visitor.c
> @@ -63,6 +63,11 @@ static void test_visitor_in_int(TestInputVisitorData *data,
> 
>      visit_type_int(v, NULL, &res, &err);
>      error_free_or_abort(&err);
> +
> +    v = visitor_input_test_init(data, "");
> +
> +    visit_type_int(v, NULL, &res, &err);
> +    error_free_or_abort(&err);
>  }
> 
>  static void check_ilist(Visitor *v, int64_t *expected, size_t n)
> @@ -140,11 +145,11 @@ static void test_visitor_in_intList(TestInputVisitorData *data,
>      v = visitor_input_test_init(data, "18446744073709551615");
>      check_ulist(v, expect4, ARRAY_SIZE(expect4));
> 
> -    /* Empty list is invalid (weird) */
> +    /* Empty list */
> 
>      v = visitor_input_test_init(data, "");
> -    visit_type_int64List(v, NULL, &res, &err);
> -    error_free_or_abort(&err);
> +    visit_type_int64List(v, NULL, &res, &error_abort);
> +    g_assert(!res);
> 
>      /* Not a list */
> 
> -- 
> 2.7.4
>
diff mbox

Patch

diff --git a/qapi/string-input-visitor.c b/qapi/string-input-visitor.c
index 806b01ae..c089491 100644
--- a/qapi/string-input-visitor.c
+++ b/qapi/string-input-visitor.c
@@ -54,6 +54,10 @@  static int parse_str(StringInputVisitor *siv, const char *name, Error **errp)
         return 0;
     }
 
+    if (!*str) {
+        return 0;
+    }
+
     do {
         errno = 0;
         start = strtoll(str, &endptr, 0);
diff --git a/tests/test-string-input-visitor.c b/tests/test-string-input-visitor.c
index 6db850b..79313a7 100644
--- a/tests/test-string-input-visitor.c
+++ b/tests/test-string-input-visitor.c
@@ -63,6 +63,11 @@  static void test_visitor_in_int(TestInputVisitorData *data,
 
     visit_type_int(v, NULL, &res, &err);
     error_free_or_abort(&err);
+
+    v = visitor_input_test_init(data, "");
+
+    visit_type_int(v, NULL, &res, &err);
+    error_free_or_abort(&err);
 }
 
 static void check_ilist(Visitor *v, int64_t *expected, size_t n)
@@ -140,11 +145,11 @@  static void test_visitor_in_intList(TestInputVisitorData *data,
     v = visitor_input_test_init(data, "18446744073709551615");
     check_ulist(v, expect4, ARRAY_SIZE(expect4));
 
-    /* Empty list is invalid (weird) */
+    /* Empty list */
 
     v = visitor_input_test_init(data, "");
-    visit_type_int64List(v, NULL, &res, &err);
-    error_free_or_abort(&err);
+    visit_type_int64List(v, NULL, &res, &error_abort);
+    g_assert(!res);
 
     /* Not a list */