All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] qapi: Fix crash on missing enum member name
@ 2021-06-16  7:21 Markus Armbruster
  2021-06-16 12:25 ` Eric Blake
  2021-06-16 16:47 ` John Snow
  0 siblings, 2 replies; 3+ messages in thread
From: Markus Armbruster @ 2021-06-16  7:21 UTC (permalink / raw)
  To: qemu-devel; +Cc: jsnow, eblake

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: 0825f62c842f2c07c5471391c6d7fd3f4fe83732
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 scripts/qapi/expr.py                     | 2 +-
 tests/qapi-schema/enum-dict-no-name.err  | 2 ++
 tests/qapi-schema/enum-dict-no-name.json | 2 ++
 tests/qapi-schema/enum-dict-no-name.out  | 0
 4 files changed, 5 insertions(+), 1 deletion(-)
 create mode 100644 tests/qapi-schema/enum-dict-no-name.err
 create mode 100644 tests/qapi-schema/enum-dict-no-name.json
 create mode 100644 tests/qapi-schema/enum-dict-no-name.out

diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py
index 496f7e0333..cf98923fa6 100644
--- a/scripts/qapi/expr.py
+++ b/scripts/qapi/expr.py
@@ -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
diff --git a/tests/qapi-schema/enum-dict-no-name.err b/tests/qapi-schema/enum-dict-no-name.err
new file mode 100644
index 0000000000..3ce0c16987
--- /dev/null
+++ b/tests/qapi-schema/enum-dict-no-name.err
@@ -0,0 +1,2 @@
+enum-dict-no-name.json: In enum 'Enum':
+enum-dict-no-name.json:2: 'data' member misses key 'name'
diff --git a/tests/qapi-schema/enum-dict-no-name.json b/tests/qapi-schema/enum-dict-no-name.json
new file mode 100644
index 0000000000..5952a8662e
--- /dev/null
+++ b/tests/qapi-schema/enum-dict-no-name.json
@@ -0,0 +1,2 @@
+# enum member lacking a name
+{ 'enum': 'Enum', 'data': [ {} ] }
diff --git a/tests/qapi-schema/enum-dict-no-name.out b/tests/qapi-schema/enum-dict-no-name.out
new file mode 100644
index 0000000000..e69de29bb2
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] qapi: Fix crash on missing enum member name
  2021-06-16  7:21 [PATCH] qapi: Fix crash on missing enum member name Markus Armbruster
@ 2021-06-16 12:25 ` Eric Blake
  2021-06-16 16:47 ` John Snow
  1 sibling, 0 replies; 3+ messages in thread
From: Eric Blake @ 2021-06-16 12:25 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: jsnow, qemu-devel

On Wed, Jun 16, 2021 at 09:21:21AM +0200, Markus Armbruster wrote:
> 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: 0825f62c842f2c07c5471391c6d7fd3f4fe83732
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] qapi: Fix crash on missing enum member name
  2021-06-16  7:21 [PATCH] qapi: Fix crash on missing enum member name Markus Armbruster
  2021-06-16 12:25 ` Eric Blake
@ 2021-06-16 16:47 ` John Snow
  1 sibling, 0 replies; 3+ messages in thread
From: John Snow @ 2021-06-16 16:47 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel; +Cc: eblake

On 6/16/21 3:21 AM, Markus Armbruster wrote:
> 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'".
> 

Whoops! Good spot.

> Fixes: 0825f62c842f2c07c5471391c6d7fd3f4fe83732
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: John Snow <jsnow@redhat.com>

> ---
>   scripts/qapi/expr.py                     | 2 +-
>   tests/qapi-schema/enum-dict-no-name.err  | 2 ++
>   tests/qapi-schema/enum-dict-no-name.json | 2 ++
>   tests/qapi-schema/enum-dict-no-name.out  | 0
>   4 files changed, 5 insertions(+), 1 deletion(-)
>   create mode 100644 tests/qapi-schema/enum-dict-no-name.err
>   create mode 100644 tests/qapi-schema/enum-dict-no-name.json
>   create mode 100644 tests/qapi-schema/enum-dict-no-name.out
> 
> diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py
> index 496f7e0333..cf98923fa6 100644
> --- a/scripts/qapi/expr.py
> +++ b/scripts/qapi/expr.py
> @@ -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
> diff --git a/tests/qapi-schema/enum-dict-no-name.err b/tests/qapi-schema/enum-dict-no-name.err
> new file mode 100644
> index 0000000000..3ce0c16987
> --- /dev/null
> +++ b/tests/qapi-schema/enum-dict-no-name.err
> @@ -0,0 +1,2 @@
> +enum-dict-no-name.json: In enum 'Enum':
> +enum-dict-no-name.json:2: 'data' member misses key 'name'
> diff --git a/tests/qapi-schema/enum-dict-no-name.json b/tests/qapi-schema/enum-dict-no-name.json
> new file mode 100644
> index 0000000000..5952a8662e
> --- /dev/null
> +++ b/tests/qapi-schema/enum-dict-no-name.json
> @@ -0,0 +1,2 @@
> +# enum member lacking a name
> +{ 'enum': 'Enum', 'data': [ {} ] }
> diff --git a/tests/qapi-schema/enum-dict-no-name.out b/tests/qapi-schema/enum-dict-no-name.out
> new file mode 100644
> index 0000000000..e69de29bb2
> 



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-06-16 16:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-16  7:21 [PATCH] qapi: Fix crash on missing enum member name Markus Armbruster
2021-06-16 12:25 ` Eric Blake
2021-06-16 16:47 ` John Snow

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.