diff options
author | Markus Armbruster <armbru@redhat.com> | 2023-03-16 08:13:19 +0100 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2023-04-24 15:21:39 +0200 |
commit | e2050ef633f77781e6b7b3aa04dd736e0ad825e1 (patch) | |
tree | 8867094aebe71b5d82da40c4c22cf2d2860ad60b /tests | |
parent | 6f2ab6090de993988f7345e449852821ffc75f4e (diff) | |
download | qemu-e2050ef633f77781e6b7b3aa04dd736e0ad825e1.zip qemu-e2050ef633f77781e6b7b3aa04dd736e0ad825e1.tar.gz qemu-e2050ef633f77781e6b7b3aa04dd736e0ad825e1.tar.bz2 |
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]
Diffstat (limited to 'tests')
-rw-r--r-- | tests/qapi-schema/meson.build | 1 | ||||
-rw-r--r-- | tests/qapi-schema/struct-data-typename.err | 2 | ||||
-rw-r--r-- | tests/qapi-schema/struct-data-typename.json | 2 | ||||
-rw-r--r-- | tests/qapi-schema/struct-data-typename.out | 0 |
4 files changed, 5 insertions, 0 deletions
diff --git a/tests/qapi-schema/meson.build b/tests/qapi-schema/meson.build index d85b14f..f88110b 100644 --- a/tests/qapi-schema/meson.build +++ b/tests/qapi-schema/meson.build @@ -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', diff --git a/tests/qapi-schema/struct-data-typename.err b/tests/qapi-schema/struct-data-typename.err new file mode 100644 index 0000000..8fbfe99 --- /dev/null +++ b/tests/qapi-schema/struct-data-typename.err @@ -0,0 +1,2 @@ +struct-data-typename.json: In struct 'Stru2': +struct-data-typename.json:2: 'data' should be an object or type name diff --git a/tests/qapi-schema/struct-data-typename.json b/tests/qapi-schema/struct-data-typename.json new file mode 100644 index 0000000..70fbad0 --- /dev/null +++ b/tests/qapi-schema/struct-data-typename.json @@ -0,0 +1,2 @@ +{ 'struct': 'Stru1', 'data': {} } +{ 'struct': 'Stru2', 'data': 'Stru1' } diff --git a/tests/qapi-schema/struct-data-typename.out b/tests/qapi-schema/struct-data-typename.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/qapi-schema/struct-data-typename.out |