diff mbox

[7/9] qapi.py: Fix diagnosing non-objects at a schema's top-level

Message ID 1374842387-17146-8-git-send-email-armbru@redhat.com
State New
Headers show

Commit Message

Markus Armbruster July 26, 2013, 12:39 p.m. UTC
Report syntax error instead of crashing.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 scripts/qapi.py                               | 10 ++++++----
 tests/qapi-schema/non-objects.err             |  2 +-
 tests/qapi-schema/quoted-structural-chars.err |  2 +-
 3 files changed, 8 insertions(+), 6 deletions(-)

Comments

Eric Blake July 26, 2013, 4:03 p.m. UTC | #1
On 07/26/2013 06:39 AM, Markus Armbruster wrote:
> Report syntax error instead of crashing.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  scripts/qapi.py                               | 10 ++++++----
>  tests/qapi-schema/non-objects.err             |  2 +-
>  tests/qapi-schema/quoted-structural-chars.err |  2 +-
>  3 files changed, 8 insertions(+), 6 deletions(-)
> 

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

Patch

diff --git a/scripts/qapi.py b/scripts/qapi.py
index a7feccb..5677daa 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -49,7 +49,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:
@@ -102,7 +102,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
@@ -120,7 +120,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
@@ -128,7 +128,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()
diff --git a/tests/qapi-schema/non-objects.err b/tests/qapi-schema/non-objects.err
index 48c849d..a6c2dc2 100644
--- a/tests/qapi-schema/non-objects.err
+++ b/tests/qapi-schema/non-objects.err
@@ -1 +1 @@ 
-Crashed: <type 'exceptions.AttributeError'>
+<stdin>:1:1: Expected "{"
diff --git a/tests/qapi-schema/quoted-structural-chars.err b/tests/qapi-schema/quoted-structural-chars.err
index 48c849d..a6c2dc2 100644
--- a/tests/qapi-schema/quoted-structural-chars.err
+++ b/tests/qapi-schema/quoted-structural-chars.err
@@ -1 +1 @@ 
-Crashed: <type 'exceptions.AttributeError'>
+<stdin>:1:1: Expected "{"