qapi: Fix crash on missing enum member name

New test case enum-dict-no-name.json crashes:

    $ python3 scripts/qapi-gen.py tests/qapi-schema/enum-dict-no-name.json
    Traceback (most recent call last):
    [...]
      File "/work/armbru/qemu/scripts/qapi/expr.py", line 458, in check_enum
	member_name = member['name']
    KeyError: 'name'

Root cause: we try to retrieve member 'name' before we check for
missing members.  With that fixed, we get the expected error "'data'
member misses key 'name'".

Fixes: 0825f62c84
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20210616072121.626431-1-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
This commit is contained in:
Markus Armbruster 2021-06-16 09:21:21 +02:00
parent a9649a719a
commit a0c7b99bf7
4 changed files with 5 additions and 1 deletions

View File

@ -455,8 +455,8 @@ def check_enum(expr: _JSONObject, info: QAPISourceInfo) -> None:
for m in members]
for member in members:
source = "'data' member"
member_name = member['name']
check_keys(member, info, source, ['name'], ['if'])
member_name = member['name']
check_name_is_str(member_name, info, source)
source = "%s '%s'" % (source, member_name)
# Enum members may start with a digit

View File

@ -0,0 +1,2 @@
enum-dict-no-name.json: In enum 'Enum':
enum-dict-no-name.json:2: 'data' member misses key 'name'

View File

@ -0,0 +1,2 @@
# enum member lacking a name
{ 'enum': 'Enum', 'data': [ {} ] }

View File