From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37066) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V37v5-0000WP-0B for qemu-devel@nongnu.org; Sat, 27 Jul 2013 13:04:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V37bD-0004bo-8I for qemu-devel@nongnu.org; Sat, 27 Jul 2013 12:44:13 -0400 Received: from oxygen.pond.sub.org ([2a01:4f8:121:10e4::3]:56008) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V36dD-0006g7-AB for qemu-devel@nongnu.org; Sat, 27 Jul 2013 11:42:07 -0400 From: Markus Armbruster Date: Sat, 27 Jul 2013 17:41:59 +0200 Message-Id: <1374939721-7876-8-git-send-email-armbru@redhat.com> In-Reply-To: <1374939721-7876-1-git-send-email-armbru@redhat.com> References: <1374939721-7876-1-git-send-email-armbru@redhat.com> Subject: [Qemu-devel] [PATCH v2 7/9] qapi.py: Fix diagnosing non-objects at a schema's top-level List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, akong@redhat.com, mdroth@linux.vnet.ibm.com Report syntax error instead of crashing. Signed-off-by: Markus Armbruster Reviewed-by: Eric Blake --- 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(-) diff --git a/scripts/qapi.py b/scripts/qapi.py index 12fb29a..75fc282 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 48c849d..a6c2dc2 100644 --- a/tests/qapi-schema/non-objects.err +++ b/tests/qapi-schema/non-objects.err @@ -1 +1 @@ -Crashed: +: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: +:1:1: Expected "{" -- 1.7.11.7