qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: Markus Armbruster <armbru@redhat.com>, qemu-devel@nongnu.org
Cc: kwolf@redhat.com, qemu-block@nongnu.org
Subject: Re: [PATCH v4 1/7] keyval: Fix and clarify grammar
Date: Mon, 12 Oct 2020 06:43:39 -0500	[thread overview]
Message-ID: <f0f23fd5-dae9-9692-135a-f22c04520d64@redhat.com> (raw)
In-Reply-To: <20201011073505.1185335-2-armbru@redhat.com>

On 10/11/20 2:34 AM, Markus Armbruster wrote:
> The grammar has a few issues:
> 
> * key-fragment = / [^=,.]* /
> 
>    Prose restricts key fragments: they "must be valid QAPI names or
>    consist only of decimal digits".  Technically, '' consists only of
>    decimal digits.  The code rejects that.  Fix the grammar.
> 
> * val          = { / [^,]* / | ',,' }
> 
>    Use + instead of *.  Accepts the same language.
> 
> * val-no-key   = / [^=,]* /
> 
>    The code rejects an empty value.  Fix the grammar.
> 
> * Section "Additional syntax for use with an implied key" is
>    confusing.  Rewrite it.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>   util/keyval.c | 16 ++++++++++------
>   1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/util/keyval.c b/util/keyval.c
> index 13def4af54..82d8497c71 100644
> --- a/util/keyval.c
> +++ b/util/keyval.c
> @@ -16,8 +16,8 @@
>    *   key-vals     = [ key-val { ',' key-val } [ ',' ] ]
>    *   key-val      = key '=' val
>    *   key          = key-fragment { '.' key-fragment }
> - *   key-fragment = / [^=,.]* /
> - *   val          = { / [^,]* / | ',,' }
> + *   key-fragment = / [^=,.]+ /

This requires a non-empty string.  Good (we don't allow an empty key).

> + *   val          = { / [^,]+ / | ',,' }

I agree that this has no real change.  Previously, you allowed zero or 
more repetitions of a regex that could produce zero characters; now, 
each outer repetition must make progress.

>    *
>    * Semantics defined by reduction to JSON:
>    *
> @@ -71,12 +71,16 @@
>    * Awkward.  Note that we carefully restrict alternate types to avoid
>    * similar ambiguity.
>    *
> - * Additional syntax for use with an implied key:
> + * Alternative syntax for use with an implied key:
>    *
> - *   key-vals-ik  = val-no-key [ ',' key-vals ]
> - *   val-no-key   = / [^=,]* /
> + *   key-vals     = [ key-val-1st { ',' key-val } [ ',' ] ]
> + *   key-val-1st  = val-no-key | key-val
> + *   val-no-key   = / [^=,]+ /
>    *
> - * where no-key is syntactic sugar for implied-key=val-no-key.
> + * where val-no-key is syntactic sugar for implied-key=val-no-key.
> + *
> + * Note that you can't use the sugared form when the value contains
> + * '=' or ','.

Nor can you use the sugared form when the value is intended to be empty 
(although this may be academic, as your other patches enumerate the list 
of clients, and none of them seem to allow an empty value even when 
desugared).

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

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



  reply	other threads:[~2020-10-12 11:45 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-11  7:34 [PATCH v4 0/7] qemu-storage-daemon: Remove QemuOpts from --object Markus Armbruster
2020-10-11  7:34 ` [PATCH v4 1/7] keyval: Fix and clarify grammar Markus Armbruster
2020-10-12 11:43   ` Eric Blake [this message]
2020-10-19  9:03     ` Markus Armbruster
2020-10-11  7:35 ` [PATCH v4 2/7] test-keyval: Demonstrate misparse of ', ' with implied key Markus Armbruster
2020-10-12 11:44   ` [PATCH v4 2/7] test-keyval: Demonstrate misparse of ',' " Eric Blake
2020-10-11  7:35 ` [PATCH v4 3/7] keyval: Fix parsing of ',' in value of " Markus Armbruster
2020-10-12 11:46   ` [PATCH v4 3/7] keyval: Fix parsing of ', ' " Eric Blake
2020-10-11  7:35 ` [PATCH v4 4/7] keyval: Parse help options Markus Armbruster
2020-10-12 11:51   ` Eric Blake
2020-10-19  9:06     ` Markus Armbruster
2020-10-12 14:35   ` Kevin Wolf
2020-10-19  9:04     ` Markus Armbruster
2020-10-11  7:35 ` [PATCH v4 5/7] qom: Factor out helpers from user_creatable_print_help() Markus Armbruster
2020-10-11  7:35 ` [PATCH v4 6/7] qom: Add user_creatable_print_help_from_qdict() Markus Armbruster
2020-10-11  7:35 ` [PATCH v4 7/7] qemu-storage-daemon: Remove QemuOpts from --object parser Markus Armbruster
2020-10-12 14:39 ` [PATCH v4 0/7] qemu-storage-daemon: Remove QemuOpts from --object Kevin Wolf
2020-10-19  9:08   ` Markus Armbruster

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=f0f23fd5-dae9-9692-135a-f22c04520d64@redhat.com \
    --to=eblake@redhat.com \
    --cc=armbru@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).