From: Markus Armbruster <armbru@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-stable@nongnu.org
Subject: Re: [PATCH] qemu-config: use qemu_opts_from_qdict
Date: Thu, 10 Jun 2021 10:48:18 +0200 [thread overview]
Message-ID: <87o8ceds19.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20210609123931.553449-1-pbonzini@redhat.com> (Paolo Bonzini's message of "Wed, 9 Jun 2021 14:39:31 +0200")
Paolo Bonzini <pbonzini@redhat.com> writes:
> Using qemu_opts_absorb_qdict, and then checking for any leftover options,
> is redundant because there is already a function that does the same,
> qemu_opts_from_qdict. qemu_opts_from_qdict consumes the whole dictionary
> and therefore can just return an error message if an option fails to validate.
I missed this when I reviewed the series...
> This also fixes a bug, because the "id" entry was retrieved in
> qemu_config_do_parse and then left there by qemu_opts_absorb_qdict.
> As a result, it was reported as an unrecognized option.
>
> Reported-by: Markus Armbruster <armbru@redhat.com>
> Fixes: 3770141139 ("qemu-config: parse configuration files to a QDict")
> Cc: qemu-stable@nongnu.org
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> util/qemu-config.c | 17 +----------------
> 1 file changed, 1 insertion(+), 16 deletions(-)
>
> diff --git a/util/qemu-config.c b/util/qemu-config.c
> index 374f3bc460..84ee6dc4ea 100644
> --- a/util/qemu-config.c
> +++ b/util/qemu-config.c
> @@ -429,29 +429,14 @@ out:
> void qemu_config_do_parse(const char *group, QDict *qdict, void *opaque, Error **errp)
> {
> QemuOptsList **lists = opaque;
> - const char *id = qdict_get_try_str(qdict, "id");
> QemuOptsList *list;
> - QemuOpts *opts;
> - const QDictEntry *unrecognized;
>
> list = find_list(lists, group, errp);
> if (!list) {
> return;
> }
>
> - opts = qemu_opts_create(list, id, 1, errp);
> - if (!opts) {
> - return;
> - }
> - if (!qemu_opts_absorb_qdict(opts, qdict, errp)) {
> - qemu_opts_del(opts);
> - return;
> - }
> - unrecognized = qdict_first(qdict);
> - if (unrecognized) {
> - error_setg(errp, QERR_INVALID_PARAMETER, unrecognized->key);
> - qemu_opts_del(opts);
> - }
> + qemu_opts_from_qdict(list, qdict, errp);
> }
>
> int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname, Error **errp)
Creation of @opts is now in qemu_opts_from_qdict(). Works the same as
before. Good. Let's compare the remainder.
Before the patch:
qemu_opts_absorb_qdict() absorbs entries with keys the QemuOpts accepts.
It either accepts a (non-empty) list of keys, or any key.
It fails when any of the absorbed entries fails
qemu_opts_from_qdict_entry().
qemu_config_do_parse() additionally fails when unabsorbed keys remain.
After the patch:
qemu_opts_from_qdict() feeds all entries to
qemu_opts_from_qdict_entry(). Which silently ignores entry "id",
and fails for keys the QemuOpts doesn't accept.
Good. The part 'ignores entry "id"' fixes the bug.
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Tangent: we silently ignore entries whose value is a QTYPE_QNULL,
QTYPE_QDICT, or QTYPE_QLIST, because qemu_opts_from_qdict_entry() does.
Not changed by this patch, I believe.
prev parent reply other threads:[~2021-06-10 8:49 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-09 12:39 [PATCH] qemu-config: use qemu_opts_from_qdict Paolo Bonzini
2021-06-09 13:18 ` Philippe Mathieu-Daudé
2021-06-10 8:48 ` Markus Armbruster [this message]
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=87o8ceds19.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-stable@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.