[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 for-2.9 17/17] qapi: Fix QemuOpts visitor regressi
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL v2 for-2.9 17/17] qapi: Fix QemuOpts visitor regression on unvisited input |
Date: |
Wed, 22 Mar 2017 18:48:28 +0100 |
From: Eric Blake <address@hidden>
An off-by-one in commit 15c2f669e meant that we were failing to
check for unparsed input in all QemuOpts visitors. Recent testsuite
additions show that fixing the obvious bug with bogus fields will
also fix the case of an incomplete list visit; update the tests to
match the new behavior.
Simple testcase:
./x86_64-softmmu/qemu-system-x86_64 -nodefaults -nographic -qmp stdio -numa
node,size=1g
failed to diagnose that 'size' is not a valid argument to -numa, and
now once again reports:
qemu-system-x86_64: -numa node,size=1g: Invalid parameter 'size'
See also https://bugzilla.redhat.com/show_bug.cgi?id=1434666
CC: address@hidden
Signed-off-by: Eric Blake <address@hidden>
Reviewed-by: Michael Roth <address@hidden>
Tested-by: Laurent Vivier <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
[Fixup squashed in]
Signed-off-by: Markus Armbruster <address@hidden>
---
qapi/opts-visitor.c | 6 +++---
qom/object_interfaces.c | 1 +
tests/test-opts-visitor.c | 13 ++++++++-----
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/qapi/opts-visitor.c b/qapi/opts-visitor.c
index 026d25b..324b197 100644
--- a/qapi/opts-visitor.c
+++ b/qapi/opts-visitor.c
@@ -164,7 +164,7 @@ opts_check_struct(Visitor *v, Error **errp)
GHashTableIter iter;
GQueue *any;
- if (ov->depth > 0) {
+ if (ov->depth > 1) {
return;
}
@@ -276,8 +276,8 @@ static void
opts_check_list(Visitor *v, Error **errp)
{
/*
- * FIXME should set error when unvisited elements remain. Mostly
- * harmless, as the generated visits always visit all elements.
+ * Unvisited list elements will be reported later when checking
+ * whether unvisited struct members remain.
*/
}
diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
index cc9a694..9c271ad 100644
--- a/qom/object_interfaces.c
+++ b/qom/object_interfaces.c
@@ -122,6 +122,7 @@ Object *user_creatable_add_opts(QemuOpts *opts, Error
**errp)
}
if (!id) {
error_setg(errp, QERR_MISSING_PARAMETER, "id");
+ g_free(type);
return NULL;
}
diff --git a/tests/test-opts-visitor.c b/tests/test-opts-visitor.c
index 8e0dda5..23e8970 100644
--- a/tests/test-opts-visitor.c
+++ b/tests/test-opts-visitor.c
@@ -175,6 +175,7 @@ expect_u64_max(OptsVisitorFixture *f, gconstpointer
test_data)
static void
test_opts_range_unvisited(void)
{
+ Error *err = NULL;
intList *list = NULL;
intList *tail;
QemuOpts *opts;
@@ -199,10 +200,11 @@ test_opts_range_unvisited(void)
g_assert_cmpint(tail->value, ==, 1);
tail = (intList *)visit_next_list(v, (GenericList *)tail, sizeof(*list));
g_assert(tail);
- visit_check_list(v, &error_abort); /* BUG: unvisited tail not reported */
+ visit_check_list(v, &error_abort); /* unvisited tail ignored until... */
visit_end_list(v, (void **)&list);
- visit_check_struct(v, &error_abort);
+ visit_check_struct(v, &err); /* ...here */
+ error_free_or_abort(&err);
visit_end_struct(v, NULL);
qapi_free_intList(list);
@@ -250,6 +252,7 @@ test_opts_range_beyond(void)
static void
test_opts_dict_unvisited(void)
{
+ Error *err = NULL;
QemuOpts *opts;
Visitor *v;
UserDefOptions *userdef;
@@ -258,11 +261,11 @@ test_opts_dict_unvisited(void)
&error_abort);
v = opts_visitor_new(opts);
- /* BUG: bogus should be diagnosed */
- visit_type_UserDefOptions(v, NULL, &userdef, &error_abort);
+ visit_type_UserDefOptions(v, NULL, &userdef, &err);
+ error_free_or_abort(&err);
visit_free(v);
qemu_opts_del(opts);
- qapi_free_UserDefOptions(userdef);
+ g_assert(!userdef);
}
int
--
2.7.4
- [Qemu-devel] [PULL v2 for-2.9 07/17] qapi2texi: Fix to actually fail when 'doc-required' is false, (continued)
- [Qemu-devel] [PULL v2 for-2.9 07/17] qapi2texi: Fix to actually fail when 'doc-required' is false, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 12/17] qapi: Fix string input visitor regression for empty lists, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 02/17] keyval: Improve some comments, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 03/17] test-keyval: Cover alternate and 'any' type, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 14/17] test-qobject-input-visitor: Cover visit_type_uint64(), Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 08/17] qapi: Drop unused QAPIDoc member optional, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 01/17] test-keyval: Tweaks to improve list coverage, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 04/17] keyval: Document issues with 'any' and alternate types, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 06/17] qapi: Drop excessive Make dependencies on qapi2texi.py, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 13/17] Revert "hostmem: fix QEMU crash by 'info memdev'", Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 17/17] qapi: Fix QemuOpts visitor regression on unvisited input,
Markus Armbruster <=
- [Qemu-devel] [PULL v2 for-2.9 16/17] qom: Avoid unvisited 'id'/'qom-type' in user_creatable_add_opts, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 10/17] tests/qapi-schema: Systematic positive doc comment tests, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 15/17] tests: Expose regression in QemuOpts visitor, Markus Armbruster, 2017/03/22
- [Qemu-devel] [PULL v2 for-2.9 05/17] MAINTAINERS: Add myself for files I touched recently, Markus Armbruster, 2017/03/22