فهرست منبع

qapi script: add check for duplicated key

It is bad that same key was specified twice, especially when a union has
two branches with same condition. This patch can prevent it.

Signed-off-by: Wenchao Xia <wenchaoqemu@gmail.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Wenchao Xia 11 سال پیش
والد
کامیت
4b35991a3b

+ 2 - 0
scripts/qapi.py

@@ -116,6 +116,8 @@ def get_members(self):
             if self.tok != ':':
             if self.tok != ':':
                 raise QAPISchemaError(self, 'Expected ":"')
                 raise QAPISchemaError(self, 'Expected ":"')
             self.accept()
             self.accept()
+            if key in expr:
+                raise QAPISchemaError(self, 'Duplicate key "%s"' % key)
             expr[key] = self.get_expr(True)
             expr[key] = self.get_expr(True)
             if self.tok == '}':
             if self.tok == '}':
                 self.accept()
                 self.accept()

+ 2 - 1
tests/Makefile

@@ -142,7 +142,8 @@ check-qapi-schema-y := $(addprefix tests/qapi-schema/, \
         missing-comma-object.json non-objects.json \
         missing-comma-object.json non-objects.json \
         qapi-schema-test.json quoted-structural-chars.json \
         qapi-schema-test.json quoted-structural-chars.json \
         trailing-comma-list.json trailing-comma-object.json \
         trailing-comma-list.json trailing-comma-object.json \
-        unclosed-list.json unclosed-object.json unclosed-string.json)
+        unclosed-list.json unclosed-object.json unclosed-string.json \
+        duplicate-key.json)
 
 
 GENERATED_HEADERS += tests/test-qapi-types.h tests/test-qapi-visit.h tests/test-qmp-commands.h
 GENERATED_HEADERS += tests/test-qapi-types.h tests/test-qapi-visit.h tests/test-qmp-commands.h
 
 

+ 1 - 0
tests/qapi-schema/duplicate-key.err

@@ -0,0 +1 @@
+<stdin>:2:10: Duplicate key "key"

+ 1 - 0
tests/qapi-schema/duplicate-key.exit

@@ -0,0 +1 @@
+1

+ 2 - 0
tests/qapi-schema/duplicate-key.json

@@ -0,0 +1,2 @@
+{ 'key': 'value',
+  'key': 'value' }

+ 0 - 0
tests/qapi-schema/duplicate-key.out