qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] qapi: Fix crash on missing enum member name


From: John Snow
Subject: Re: [PATCH] qapi: Fix crash on missing enum member name
Date: Wed, 16 Jun 2021 12:47:33 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1

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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]