We don't actually check, so the user can get some unpleasant stacktraces. Formalize it.
Signed-off-by: John Snow <js...@redhat.com> --- scripts/qapi/expr.py | 7 +++++++ tests/qapi-schema/alternate-invalid-data-type.err | 2 ++ tests/qapi-schema/union-invalid-data-type.err | 2 ++ 3 files changed, 11 insertions(+) diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py index 73e7d8cb0d..ca5ab7bfda 100644 --- a/scripts/qapi/expr.py +++ b/scripts/qapi/expr.py @@ -281,6 +281,9 @@ def check_union(expr, info): raise QAPISemError(info, "'discriminator' requires 'base'") check_name_is_str(discriminator, info, "'discriminator'") + if not isinstance(members, dict): + raise QAPISemError(info, "'data' must be an object") + for (key, value) in members.items(): source = "'data' member '%s'" % key if discriminator is None: @@ -296,6 +299,10 @@ def check_alternate(expr, info): if not members: raise QAPISemError(info, "'data' must not be empty") + + if not isinstance(members, dict): + raise QAPISemError(info, "'data' must be an object") + for (key, value) in members.items(): source = "'data' member '%s'" % key check_name_lower(key, info, source) diff --git a/tests/qapi-schema/alternate-invalid-data-type.err b/tests/qapi-schema/alternate-invalid-data-type.err index e69de29bb2..c7301ccb00 100644 --- a/tests/qapi-schema/alternate-invalid-data-type.err +++ b/tests/qapi-schema/alternate-invalid-data-type.err @@ -0,0 +1,2 @@ +alternate-invalid-data-type.json: In alternate 'Alt': +alternate-invalid-data-type.json:2: 'data' must be an object diff --git a/tests/qapi-schema/union-invalid-data-type.err b/tests/qapi-schema/union-invalid-data-type.err index e69de29bb2..b71c3400c5 100644 --- a/tests/qapi-schema/union-invalid-data-type.err +++ b/tests/qapi-schema/union-invalid-data-type.err @@ -0,0 +1,2 @@ +union-invalid-data-type.json: In union 'TestUnion': +union-invalid-data-type.json:9: 'data' must be an object -- 2.30.2