qapi: Fix QemuOpts visitor regression on unvisited input
An off-by-one in commit15c2f669e
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: qemu-stable@nongnu.org Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com> Tested-by: Laurent Vivier <lvivier@redhat.com> Message-Id: <20170322144525.18964-4-eblake@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> (cherry picked from commit21f88d021d
) Conflicts: qapi/opts-visitor.c tests/test-opts-visitor.c * drop changes related to9cb8ef36
anda9416dc6
tests Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
c15c6d2594
commit
2f8ab9b1dd
|
@ -164,7 +164,7 @@ opts_check_struct(Visitor *v, Error **errp)
|
|||
GHashTableIter iter;
|
||||
GQueue *any;
|
||||
|
||||
if (ov->depth > 0) {
|
||||
if (ov->depth > 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -175,6 +175,7 @@ expect_u64_max(OptsVisitorFixture *f, gconstpointer test_data)
|
|||
static void
|
||||
test_opts_dict_unvisited(void)
|
||||
{
|
||||
Error *err = NULL;
|
||||
QemuOpts *opts;
|
||||
Visitor *v;
|
||||
UserDefOptions *userdef;
|
||||
|
@ -183,11 +184,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
|
||||
|
|
Loading…
Reference in New Issue