diff options
author | Eric Blake <eblake@redhat.com> | 2016-02-17 23:48:17 -0700 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2016-02-19 11:08:56 +0100 |
commit | 46534309e667fd860720f983c2c9aefe0354340d (patch) | |
tree | def73f0f34e3c1fd607c2624d350312e2a0a0791 /tests/qapi-schema | |
parent | 02a57ae32b08e8981b59979b80e682c9a153e94d (diff) | |
download | qemu-46534309e667fd860720f983c2c9aefe0354340d.zip qemu-46534309e667fd860720f983c2c9aefe0354340d.tar.gz qemu-46534309e667fd860720f983c2c9aefe0354340d.tar.bz2 |
qapi: Forbid 'any' inside an alternate
The whole point of an alternate is to allow some type-safety while
still accepting more than one JSON type. Meanwhile, the 'any'
type exists to bypass type-safety altogether. The two are
incompatible: you can't accept every type, and still tell which
branch of the alternate to use for the parse; fix this to give a
sane error instead of a Python stack trace.
Note that other types that can't be alternate members are caught
earlier, by check_type().
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <1455778109-6278-4-git-send-email-eblake@redhat.com>
[Commit message tweaked]
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Diffstat (limited to 'tests/qapi-schema')
-rw-r--r-- | tests/qapi-schema/alternate-any.err | 1 | ||||
-rw-r--r-- | tests/qapi-schema/alternate-any.exit | 1 | ||||
-rw-r--r-- | tests/qapi-schema/alternate-any.json | 4 | ||||
-rw-r--r-- | tests/qapi-schema/alternate-any.out | 0 |
4 files changed, 6 insertions, 0 deletions
diff --git a/tests/qapi-schema/alternate-any.err b/tests/qapi-schema/alternate-any.err new file mode 100644 index 0000000..aaa0154 --- /dev/null +++ b/tests/qapi-schema/alternate-any.err @@ -0,0 +1 @@ +tests/qapi-schema/alternate-any.json:2: Alternate 'Alt' member 'one' cannot use type 'any' diff --git a/tests/qapi-schema/alternate-any.exit b/tests/qapi-schema/alternate-any.exit new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/qapi-schema/alternate-any.exit @@ -0,0 +1 @@ +1 diff --git a/tests/qapi-schema/alternate-any.json b/tests/qapi-schema/alternate-any.json new file mode 100644 index 0000000..e47a73a --- /dev/null +++ b/tests/qapi-schema/alternate-any.json @@ -0,0 +1,4 @@ +# we do not allow the 'any' type as an alternate branch +{ 'alternate': 'Alt', + 'data': { 'one': 'any', + 'two': 'int' } } diff --git a/tests/qapi-schema/alternate-any.out b/tests/qapi-schema/alternate-any.out new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/qapi-schema/alternate-any.out |