aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2023-03-16 08:13:19 +0100
committerMarkus Armbruster <armbru@redhat.com>2023-04-24 15:21:39 +0200
commite2050ef633f77781e6b7b3aa04dd736e0ad825e1 (patch)
tree8867094aebe71b5d82da40c4c22cf2d2860ad60b /tests
parent6f2ab6090de993988f7345e449852821ffc75f4e (diff)
downloadqemu-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.build1
-rw-r--r--tests/qapi-schema/struct-data-typename.err2
-rw-r--r--tests/qapi-schema/struct-data-typename.json2
-rw-r--r--tests/qapi-schema/struct-data-typename.out0
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