All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, mreitz@redhat.com
Subject: Re: [PATCH for-5.1 1/8] tests-qemu-opts: Cover has_help_option(), qemu_opt_has_help_opt()
Date: Tue, 14 Apr 2020 15:13:39 +0200	[thread overview]
Message-ID: <20200414131339.GE7747@linux.fritz.box> (raw)
In-Reply-To: <878siyxwir.fsf@dusky.pond.sub.org>

Am 14.04.2020 um 11:10 hat Markus Armbruster geschrieben:
> Eric Blake <eblake@redhat.com> writes:
> 
> > On 4/9/20 10:30 AM, Markus Armbruster wrote:
> >> The two turn out to be inconsistent for "a,b,,help".  Test case
> >> marked /* BUG */.
> >>
> >> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> >> ---
> >>   tests/test-qemu-opts.c | 38 ++++++++++++++++++++++++++++++++++++++
> >>   1 file changed, 38 insertions(+)
> >>
> >
> >> +static void test_has_help_option(void)
> >> +{
> >> +    static const struct {
> >> +        const char *params;
> >> +        /* expected value of has_help_option() */
> >> +        bool expect_has_help_option;
> >> +        /* expected value of qemu_opt_has_help_opt() with implied=false */
> >> +        bool expect_opt_has_help_opt;
> >> +        /* expected value of qemu_opt_has_help_opt() with implied=true */
> >> +        bool expect_opt_has_help_opt_implied;
> >> +    } test[] = {
> >> +        { "help", true, true, false },

While we're talking about unintuitive, I feel the result for
implied=true is confusing, too. Never noticed it before, but are we
really sure that it is the best possible behaviour that '-chardev help'
and '-chardev id=foo,help' print two entirely different help texts?

I'm not requesting to change anything about this in this series, but
just making the point that maybe sometimes the existing behaviour is
questionable.

> >> +        { "helpme", false, false, false },
> >> +        { "a,help", true, true, true },
> >> +        { "a=0,help,b", true, true, true },
> >> +        { "help,b=1", true, true, false },
> >> +        { "a,b,,help", false /* BUG */, true, true },
> >
> > So which way are you calling the bug?  Without looking at the code but
> > going off my intuition, I parse this as option 'a' and option
> > 'b,help'. The latter is not a normal option name because it contains a
> > ',', but is a valid option value.
> >
> > I agree that we have a bug, but I'm not yet sure in which direction
> > the bug lies (should has_help_option be fixed to report true, in which
> > case the substring ",help" has precedence over ',,' escaping; or
> > should qemu_opt_has_help_opt be fixed to report false, due to treating
> > 'b,help' after ',,' escape removal as an invalid option name).  So the
> > placement of the /* BUG */ comment matters - where you placed it, I'm
> > presuming that later in the series you change has_help_option to
> > return true, even though that goes against my intuitive parse.
> 
> In addition to the canonical QemuOpts parser opts_do_parse(), we have
> several more, and of course they all differ from the canonical one for
> corner cases.
> 
> I treat the canonical one as correct, and fix the others by eliminating
> the extra parsers.
> 
> The others are:
> 
> * has_help_option()
> 
>   Fixed in PATCH 5 by reusing the guts of opts_do_parse().
> 
> * is_valid_option_list()
> 
>   Fixed in PATCH 8 by not parsing.
> 
> * "id" extraction in opts_parse()
> 
>   Lazy hack.  Fixed in PATCH 3 by reusing the guts of opts_do_parse().
> 
> Back to your question: the value of has_help_option() differs from the
> value of qemu_opt_has_help_opt().  The latter uses the canonical parser,
> the former is one of the other parsers.  I therefore judge the latter
> right and the former wrong.

Shouldn't we also consider what users would reasonably expect?

Getting it parsed as an empty option name (I assume with a default value
of "on"?) certainly looks like something that would surprise most users
and, as you can see, even some QEMU developers.

Kevin



  reply	other threads:[~2020-04-14 13:15 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-09 15:30 [PATCH for-5.1 0/8] qemu-option: Fix corner cases and clean up Markus Armbruster
2020-04-09 15:30 ` [PATCH for-5.1 1/8] tests-qemu-opts: Cover has_help_option(), qemu_opt_has_help_opt() Markus Armbruster
2020-04-09 17:50   ` Eric Blake
2020-04-14  9:10     ` Markus Armbruster
2020-04-14 13:13       ` Kevin Wolf [this message]
2020-04-14 13:36         ` Markus Armbruster
2020-04-14 14:29           ` Kevin Wolf
2020-04-14 20:13             ` Markus Armbruster
2020-04-15 10:00               ` Kevin Wolf
2020-04-15 14:45                 ` Markus Armbruster
2020-04-09 15:30 ` [PATCH for-5.1 2/8] qemu-options: Factor out get_opt_name_value() helper Markus Armbruster
2020-04-09 18:01   ` Eric Blake
2020-04-14  9:42     ` Markus Armbruster
2020-04-14 14:05       ` Kevin Wolf
2020-04-15  7:03         ` Markus Armbruster
2020-04-14 14:05   ` Kevin Wolf
2020-04-09 15:30 ` [PATCH for-5.1 3/8] qemu-option: Fix sloppy recognition of "id=..." after ", , " Markus Armbruster
2020-04-09 18:05   ` Eric Blake
2020-04-14 14:44   ` [PATCH for-5.1 3/8] qemu-option: Fix sloppy recognition of "id=..." after ",," Kevin Wolf
2020-04-09 15:30 ` [PATCH for-5.1 4/8] qemu-option: Avoid has_help_option() in qemu_opts_parse_noisily() Markus Armbruster
2020-04-09 18:07   ` Eric Blake
2020-04-14 10:04     ` Markus Armbruster
2020-04-09 15:30 ` [PATCH for-5.1 5/8] qemu-option: Fix has_help_option()'s sloppy parsing Markus Armbruster
2020-04-09 18:10   ` Eric Blake
2020-04-14 10:16     ` Markus Armbruster
2020-04-14 14:57       ` Kevin Wolf
2020-04-15  7:48         ` Markus Armbruster
2020-04-09 15:30 ` [PATCH for-5.1 6/8] test-qemu-opts: Simplify test_has_help_option() after bug fix Markus Armbruster
2020-04-09 18:13   ` Eric Blake
2020-04-14 14:58   ` Kevin Wolf
2020-04-09 15:30 ` [PATCH for-5.1 7/8] qemu-img: Factor out accumulate_options() helper Markus Armbruster
2020-04-09 18:15   ` Eric Blake
2020-04-14 15:00   ` Kevin Wolf
2020-04-09 15:30 ` [PATCH for-5.1 8/8] qemu-option: Move is_valid_option_list() to qemu-img.c and rewrite Markus Armbruster
2020-04-09 19:45   ` Eric Blake
2020-04-14  8:47     ` Markus Armbruster
2020-04-14 14:34       ` Markus Armbruster
2020-04-14 15:10         ` Kevin Wolf
2020-04-14 20:14           ` Markus Armbruster
2020-04-09 17:09 ` [PATCH for-5.1 0/8] qemu-option: Fix corner cases and clean up no-reply
2020-04-09 17:44   ` Eric Blake
2020-04-14  8:52     ` 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=20200414131339.GE7747@linux.fritz.box \
    --to=kwolf@redhat.com \
    --cc=armbru@redhat.com \
    --cc=mreitz@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 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.