qapi: Fix to reject 'data': 'mumble' in struct

A struct's 'data' must be a JSON object defining the struct's members.
The QAPI code generator incorrectly accepts a JSON string instead, and
then crashes in QAPISchema._make_members() called from
._def_struct_type().

Fix to reject it: factor check_type_implicit() out of
check_type_name_or_implicit(), and switch check_struct() to use it
instead.  Also add a test case.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20230316071325.492471-9-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
[More detailed commit message]
This commit is contained in:
Markus Armbruster 2023-03-16 08:13:19 +01:00
parent 6f2ab6090d
commit e2050ef633
5 changed files with 20 additions and 9 deletions

View file

@ -164,6 +164,7 @@ schemas = [
'struct-base-clash-deep.json',
'struct-base-clash.json',
'struct-data-invalid.json',
'struct-data-typename.json',
'struct-member-if-invalid.json',
'struct-member-invalid-dict.json',
'struct-member-invalid.json',

View file

@ -0,0 +1,2 @@
struct-data-typename.json: In struct 'Stru2':
struct-data-typename.json:2: 'data' should be an object or type name

View file

@ -0,0 +1,2 @@
{ 'struct': 'Stru1', 'data': {} }
{ 'struct': 'Stru2', 'data': 'Stru1' }