qapi.py: Fix diagnosing non-objects at a schema's top-level
authorMarkus Armbruster <armbru@redhat.com>
Sat, 27 Jul 2013 15:41:59 +0000 (17:41 +0200)
committerAnthony Liguori <aliguori@us.ibm.com>
Mon, 29 Jul 2013 15:37:11 +0000 (10:37 -0500)
Report syntax error instead of crashing.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 1374939721-7876-8-git-send-email-armbru@redhat.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
scripts/qapi.py
tests/qapi-schema/non-objects.err
tests/qapi-schema/quoted-structural-chars.err

index 12fb29a04773e3eb981e114da897c47e5eeeb49f..75fc28252d68fd56acd40cf8b4a73db398420aed 100644 (file)
@@ -64,7 +64,7 @@ class QAPISchema:
         self.accept()
 
         while self.tok != None:
-            self.exprs.append(self.get_expr())
+            self.exprs.append(self.get_expr(False))
 
     def accept(self):
         while True:
@@ -117,7 +117,7 @@ class QAPISchema:
             if self.tok != ':':
                 raise QAPISchemaError(self, 'Expected ":"')
             self.accept()
-            expr[key] = self.get_expr()
+            expr[key] = self.get_expr(True)
             if self.tok == '}':
                 self.accept()
                 return expr
@@ -135,7 +135,7 @@ class QAPISchema:
         if not self.tok in [ '{', '[', "'" ]:
             raise QAPISchemaError(self, 'Expected "{", "[", "]" or string')
         while True:
-            expr.append(self.get_expr())
+            expr.append(self.get_expr(True))
             if self.tok == ']':
                 self.accept()
                 return expr
@@ -143,7 +143,9 @@ class QAPISchema:
                 raise QAPISchemaError(self, 'Expected "," or "]"')
             self.accept()
 
-    def get_expr(self):
+    def get_expr(self, nested):
+        if self.tok != '{' and not nested:
+            raise QAPISchemaError(self, 'Expected "{"')
         if self.tok == '{':
             self.accept()
             expr = self.get_members()
index 48c849d18fa140b10d28c0e8c4faccdbd5b247b8..a6c2dc26a63b3c63c0be58694cd81b743853860b 100644 (file)
@@ -1 +1 @@
-Crashed: <type 'exceptions.AttributeError'>
+<stdin>:1:1: Expected "{"
index 48c849d18fa140b10d28c0e8c4faccdbd5b247b8..a6c2dc26a63b3c63c0be58694cd81b743853860b 100644 (file)
@@ -1 +1 @@
-Crashed: <type 'exceptions.AttributeError'>
+<stdin>:1:1: Expected "{"