qapi: Catch and reject flat union branch of array type

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Markus Armbruster 2015-06-10 13:07:43 +02:00
parent 75276710ae
commit f9a1427361
2 changed files with 2 additions and 11 deletions

View file

@ -580,7 +580,7 @@ def check_union(expr, expr_info):
# Each value must name a known type; furthermore, in flat unions,
# branches must be a struct with no overlapping member names
check_type(expr_info, "Member '%s' of union '%s'" % (key, name),
value, allow_array=True, allow_metas=allow_metas)
value, allow_array=not base, allow_metas=allow_metas)
if base:
branch_struct = find_struct(value)
assert branch_struct

View file

@ -1,10 +1 @@
Traceback (most recent call last):
File "tests/qapi-schema/test-qapi.py", line 19, in <module>
exprs = parse_schema(sys.argv[1])
File "scripts/qapi.py", line 760, in parse_schema
return check_exprs(schema.exprs)
File "scripts/qapi.py", line 743, in check_exprs
check_union(expr, info)
File "scripts/qapi.py", line 586, in check_union
assert branch_struct
AssertionError
tests/qapi-schema/flat-union-array-branch.json:8: Member 'value1' of union 'TestUnion' cannot be an array