All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>,
	 qemu-devel@nongnu.org, michael.roth@amd.com,
	 marcandre.lureau@redhat.com,  berrange@redhat.com,
	jsnow@redhat.com
Subject: Re: [PATCH 08/14] qapi: Fix to reject 'data': 'mumble' in struct
Date: Fri, 17 Mar 2023 06:48:52 +0100	[thread overview]
Message-ID: <87ttyknd17.fsf@pond.sub.org> (raw)
In-Reply-To: <20230317010258.c3nlbx3og26prfu3@redhat.com> (Eric Blake's message of "Thu, 16 Mar 2023 20:02:58 -0500")

Eric Blake <eblake@redhat.com> writes:

> On Thu, Mar 16, 2023 at 08:13:19AM +0100, Markus Armbruster wrote:
>> A struct's 'data' must be a JSON object defining the struct's members.
>> The QAPI code generator incorrectly accepts a JSON string instead, and
>> then crashes in QAPISchema._make_members() called from
>> ._def_struct_type().
>> 
>> Fix to reject it, and add a test case.
>
> Nice catch; I see why the split into three functions earlier on
> foreshadowed some subtle bug fixes to come.
>
>> +++ b/scripts/qapi/expr.py
>> @@ -354,14 +354,14 @@ def check_type_name_or_array(value: Optional[object],
>>                             source)
>>  
>>  
>> -def check_type_name_or_implicit(value: Optional[object],
>> -                                info: QAPISourceInfo, source: str,
>> -                                parent_name: Optional[str]) -> None:
>> +def check_type_implicit(value: Optional[object],
>> +                        info: QAPISourceInfo, source: str,
>> +                        parent_name: Optional[str]) -> None:
>
> At first I thought this was a straight rename...
>
>>      """
>>      Normalize and validate an optional implicit struct type.
>>  
>> -    Accept ``None``, ``str``, or a ``dict`` defining an implicit
>> -    struct type.  The latter is normalized in place.
>> +    Accept ``None`` or a ``dict`` defining an implicit struct type.
>> +    The latter is normalized in place.
>>  
>>      :param value: The value to check.
>>      :param info: QAPI schema source file information.
>> @@ -377,9 +377,6 @@ def check_type_name_or_implicit(value: Optional[object],
>>      if value is None:
>>          return
>>  
>> -    if isinstance(value, str):
>> -        return
>> -
>>      if not isinstance(value, dict):
>>          raise QAPISemError(info,
>>                             "%s should be an object or type name" % source)
>> @@ -401,6 +398,15 @@ def check_type_name_or_implicit(value: Optional[object],
>>          check_type_name_or_array(arg['type'], info, key_source)
>>  
>>  
>> +def check_type_name_or_implicit(value: Optional[object],
>> +                                info: QAPISourceInfo, source: str,
>> +                                parent_name: Optional[str]) -> None:
>> +    if value is None or isinstance(value, str):
>
> ...until I got here and saw that you kept the original name, and added
> a new helper.  Worth calling out the new function name
> check_type_implicit() in the commit message?  It would have spared me
> a minute.

Can do.

> As earlier, you lost the doc comment.  I'll leave it to your
> discretion if it is important to copy one back in.

I didn't duplicate the doc string, which means it moves from
check_type_name_or_implicit() to check_type_implicit(), where the actual
meat is.

John, you added the doc string in commit a48653638fa (qapi/expr.py: Add
docstrings).  Do you have an opinion?

>> +        return
>> +
>> +    check_type_implicit(value, info, source, parent_name)
>> +
>> +
>>  def check_features(features: Optional[object],
>>                     info: QAPISourceInfo) -> None:
>>      """
>> @@ -486,7 +492,7 @@ def check_struct(expr: QAPIExpression) -> None:
>>      name = cast(str, expr['struct'])  # Checked in check_exprs
>>      members = expr['data']
>>  
>> -    check_type_name_or_implicit(members, expr.info, "'data'", name)
>> +    check_type_implicit(members, expr.info, "'data'", name)
>>      check_type_name(expr.get('base'), expr.info, "'base'")
>>
>
> Reviewed-by: Eric Blake <eblake@redhat.com>

Thanks!



  reply	other threads:[~2023-03-17  5:49 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-16  7:13 [PATCH 00/14] qapi: Fix minor bugs, require boxed for conditional arguments Markus Armbruster
2023-03-16  7:13 ` [PATCH 01/14] qapi: Fix error message format regression Markus Armbruster
2023-03-16 21:56   ` Eric Blake
2023-03-16  7:13 ` [PATCH 02/14] qapi/schema: Use super() Markus Armbruster
2023-03-16  7:40   ` Philippe Mathieu-Daudé
2023-03-16  7:13 ` [PATCH 03/14] qapi: Clean up after removal of simple unions Markus Armbruster
2023-03-17  0:38   ` Eric Blake
2023-03-16  7:13 ` [PATCH 04/14] qapi: Split up check_type() Markus Armbruster
2023-03-17  0:53   ` Eric Blake
2023-03-17  5:36     ` Markus Armbruster
2023-03-16  7:13 ` [PATCH 05/14] qapi: Improve error message for unexpected array types Markus Armbruster
2023-03-16  7:41   ` Philippe Mathieu-Daudé
2023-03-16  7:13 ` [PATCH 06/14] qapi: Simplify code a bit after previous commit Markus Armbruster
2023-03-17  0:55   ` Eric Blake
2023-03-17  5:42     ` Markus Armbruster
2023-03-16  7:13 ` [PATCH 07/14] qapi: Fix error message when type name or array is expected Markus Armbruster
2023-03-17  0:57   ` Eric Blake
2023-03-16  7:13 ` [PATCH 08/14] qapi: Fix to reject 'data': 'mumble' in struct Markus Armbruster
2023-03-17  1:02   ` Eric Blake
2023-03-17  5:48     ` Markus Armbruster [this message]
2023-03-16  7:13 ` [PATCH 09/14] tests/qapi-schema: Improve union discriminator coverage Markus Armbruster
2023-03-17  1:06   ` Eric Blake
2023-03-17  5:51     ` Markus Armbruster
2023-03-16  7:13 ` [PATCH 10/14] tests/qapi-schema: Rename a few conditionals Markus Armbruster
2023-03-16  7:45   ` Philippe Mathieu-Daudé
2023-03-16  7:13 ` [PATCH 11/14] tests/qapi-schema: Clean up positive test for conditionals Markus Armbruster
2023-03-17  1:09   ` Eric Blake
2023-03-17  6:10     ` Markus Armbruster
2023-03-17 12:29       ` Eric Blake
2023-03-17 14:14         ` Markus Armbruster
2023-03-16  7:13 ` [PATCH 12/14] tests/qapi-schema: Cover optional conditional struct member Markus Armbruster
2023-03-16  7:45   ` Philippe Mathieu-Daudé
2023-03-16  7:13 ` [PATCH 13/14] qapi: Fix code generated for " Markus Armbruster
2023-03-17  1:13   ` Eric Blake
2023-03-16  7:13 ` [PATCH 14/14] qapi: Require boxed for conditional command and event arguments Markus Armbruster
2023-03-17  1:17   ` Eric Blake

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ttyknd17.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=eblake@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.