diff options
author | Markus Armbruster <armbru@redhat.com> | 2013-07-27 17:41:59 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2013-07-29 10:37:11 -0500 |
commit | 5f3cd2b717c949f3afb502fb4c81193eb18ce6aa (patch) | |
tree | 8e25d6941dca6c5c30c5438305ab00ffeff75d35 | |
parent | 6974ccd542d11ae5fb1e56dd3d753f2de5cc097e (diff) |
qapi.py: Fix diagnosing non-objects at a schema's top-level
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>
-rw-r--r-- | scripts/qapi.py | 10 | ||||
-rw-r--r-- | tests/qapi-schema/non-objects.err | 2 | ||||
-rw-r--r-- | tests/qapi-schema/quoted-structural-chars.err | 2 |
3 files changed, 8 insertions, 6 deletions
diff --git a/scripts/qapi.py b/scripts/qapi.py index 12fb29a047..75fc28252d 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -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() diff --git a/tests/qapi-schema/non-objects.err b/tests/qapi-schema/non-objects.err index 48c849d18f..a6c2dc26a6 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 48c849d18f..a6c2dc26a6 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 "{" |