From patchwork Fri Sep 4 14:21:27 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Armbruster X-Patchwork-Id: 514585 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id B329F1402A3 for ; Sat, 5 Sep 2015 00:40:24 +1000 (AEST) Received: from localhost ([::1]:59967 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZXsAA-0002Sf-C0 for incoming@patchwork.ozlabs.org; Fri, 04 Sep 2015 10:40:22 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49575) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZXrsJ-0004HL-9R for qemu-devel@nongnu.org; Fri, 04 Sep 2015 10:21:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZXrsF-0001aF-Vu for qemu-devel@nongnu.org; Fri, 04 Sep 2015 10:21:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49797) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZXrsF-0001ZB-Ja for qemu-devel@nongnu.org; Fri, 04 Sep 2015 10:21:51 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 3319AC0AB67D for ; Fri, 4 Sep 2015 14:21:51 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-116-25.ams2.redhat.com [10.36.116.25]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t84ELkMQ004662 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Fri, 4 Sep 2015 10:21:50 -0400 Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 6D5073001873; Fri, 4 Sep 2015 16:21:42 +0200 (CEST) From: Markus Armbruster To: qemu-devel@nongnu.org Date: Fri, 4 Sep 2015 16:21:27 +0200 Message-Id: <1441376500-14784-21-git-send-email-armbru@redhat.com> In-Reply-To: <1441376500-14784-1-git-send-email-armbru@redhat.com> References: <1441376500-14784-1-git-send-email-armbru@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 20/33] qapi: Fix to reject union command and event arguments X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org A command's or event's 'data' must be a struct type, given either as a dictionary, or as struct type name. Commit dd883c6 tightened the checking there, but not enough: we still accept 'union'. Fix to reject it. We may want to support union types there, but we'll have to extend qapi-commands.py and qapi-events.py for it. Signed-off-by: Markus Armbruster Reviewed-by: Eric Blake --- docs/qapi-code-gen.txt | 7 +++---- scripts/qapi.py | 4 ++-- tests/qapi-schema/args-union.err | 1 + tests/qapi-schema/args-union.exit | 2 +- tests/qapi-schema/args-union.json | 2 +- tests/qapi-schema/args-union.out | 4 ---- 6 files changed, 8 insertions(+), 12 deletions(-) diff --git a/docs/qapi-code-gen.txt b/docs/qapi-code-gen.txt index c2ac21c..c19c157 100644 --- a/docs/qapi-code-gen.txt +++ b/docs/qapi-code-gen.txt @@ -405,10 +405,9 @@ Client JSON Protocol command exchange. The 'data' argument maps to the "arguments" dictionary passed in as part of a Client JSON Protocol command. The 'data' member is optional and defaults to {} (an empty dictionary). If present, it must be the -string name of a complex type, a one-element array containing the name -of a complex type, or a dictionary that declares an anonymous type -with the same semantics as a 'struct' expression, with one exception -noted below when 'gen' is used. +string name of a complex type, or a dictionary that declares an +anonymous type with the same semantics as a 'struct' expression, with +one exception noted below when 'gen' is used. The 'returns' member describes what will appear in the "return" field of a Client JSON Protocol reply on successful completion of a command. diff --git a/scripts/qapi.py b/scripts/qapi.py index 4879982..bbeae4d 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -499,7 +499,7 @@ def check_command(expr, expr_info): check_type(expr_info, "'data' for command '%s'" % name, expr.get('data'), allow_dict=True, allow_optional=True, - allow_metas=['union', 'struct'], allow_star=allow_star) + allow_metas=['struct'], allow_star=allow_star) returns_meta = ['union', 'struct'] if name in returns_whitelist: returns_meta += ['built-in', 'alternate', 'enum'] @@ -517,7 +517,7 @@ def check_event(expr, expr_info): events.append(name) check_type(expr_info, "'data' for event '%s'" % name, expr.get('data'), allow_dict=True, allow_optional=True, - allow_metas=['union', 'struct']) + allow_metas=['struct']) def check_union(expr, expr_info): name = expr['union'] diff --git a/tests/qapi-schema/args-union.err b/tests/qapi-schema/args-union.err index e69de29..1d693d7 100644 --- a/tests/qapi-schema/args-union.err +++ b/tests/qapi-schema/args-union.err @@ -0,0 +1 @@ +tests/qapi-schema/args-union.json:4: 'data' for command 'oops' cannot use union type 'Uni' diff --git a/tests/qapi-schema/args-union.exit b/tests/qapi-schema/args-union.exit index 573541a..d00491f 100644 --- a/tests/qapi-schema/args-union.exit +++ b/tests/qapi-schema/args-union.exit @@ -1 +1 @@ -0 +1 diff --git a/tests/qapi-schema/args-union.json b/tests/qapi-schema/args-union.json index db97ef6..7bdcbb7 100644 --- a/tests/qapi-schema/args-union.json +++ b/tests/qapi-schema/args-union.json @@ -1,4 +1,4 @@ -# FIXME we should reject union arguments +# we do not allow union arguments # TODO should we support this? { 'union': 'Uni', 'data': { 'case1': 'int', 'case2': 'str' } } { 'command': 'oops', 'data': 'Uni' } diff --git a/tests/qapi-schema/args-union.out b/tests/qapi-schema/args-union.out index 907080c..e69de29 100644 --- a/tests/qapi-schema/args-union.out +++ b/tests/qapi-schema/args-union.out @@ -1,4 +0,0 @@ -[OrderedDict([('union', 'Uni'), ('data', OrderedDict([('case1', 'int'), ('case2', 'str')]))]), - OrderedDict([('command', 'oops'), ('data', 'Uni')])] -[{'enum_name': 'UniKind', 'enum_values': None}] -[]