From: Markus Armbruster <armbru@redhat.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: jan.kiszka@siemens.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 8/9] QMP: Introduce qmp_check_input_obj()
Date: Wed, 02 Jun 2010 09:39:26 +0200 [thread overview]
Message-ID: <m3vda1evdd.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <1275424897-32253-9-git-send-email-lcapitulino@redhat.com> (Luiz Capitulino's message of "Tue, 1 Jun 2010 17:41:36 -0300")
Luiz Capitulino <lcapitulino@redhat.com> writes:
> This is similar to qmp_check_client_args(), but checks if
> the input object follows the specification (QMP/qmp-spec.txt
> section 2.3).
>
> As we're limited to three keys, the work here is quite simple:
> we iterate over the input object, each time checking if the
> given argument complies to the specification.
>
> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> ---
> monitor.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 45 insertions(+), 0 deletions(-)
>
> diff --git a/monitor.c b/monitor.c
> index 1875731..654b193 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -4271,6 +4271,45 @@ static int qmp_check_client_args(const mon_cmd_t *cmd, QDict *client_args)
> return res.result;
> }
>
> +/*
> + * Input object checking rules
> + *
> + * 1. "execute" key must exist (not checked here)
> + * 2. "execute" key must be a string
> + * 3. "arguments" key must be a dict
> + * 4. "id" key can be anything (ie. json-value)
Really? Checking qmp-spec.txt... yes, really. Is it a good idea to
permit objects and arrays?
> + * 5. Any argument not listed above is invalid
> + */
> +static void qmp_check_input_obj(const char *input_obj_arg_name,
> + QObject *input_obj_arg, void *opaque)
> +{
> + int *err = opaque;
> +
> + if (*err < 0) {
> + /* report only the first error */
> + return;
> + }
> +
> + if (!strcmp(input_obj_arg_name, "execute")) {
> + if (qobject_type(input_obj_arg) != QTYPE_QSTRING) {
> + qerror_report(QERR_QMP_BAD_INPUT_OBJECT_MEMBER, "execute",
> + "string");
> + *err = -1;
> + }
> + } else if (!strcmp(input_obj_arg_name, "arguments")) {
> + if (qobject_type(input_obj_arg) != QTYPE_QDICT) {
> + qerror_report(QERR_QMP_BAD_INPUT_OBJECT_MEMBER, "arguments",
> + "object");
> + *err = -1;
> + }
> + } else if (!strcmp(input_obj_arg_name, "id")) {
> + /* nothing to do */
> + } else {
> + qerror_report(QERR_QMP_INVALID_INPUT_OBJECT_MEMBER, input_obj_arg_name);
> + *err = -1;
> + }
> +}
> +
> static void handle_qmp_command(JSONMessageParser *parser, QList *tokens)
> {
> int err;
> @@ -4295,6 +4334,12 @@ static void handle_qmp_command(JSONMessageParser *parser, QList *tokens)
>
> input = qobject_to_qdict(obj);
>
> + err = 0;
> + qdict_iter(input, qmp_check_input_obj, &err);
> + if (err < 0) {
> + goto err_out;
> + }
> +
> mon->mc->id = qdict_get(input, "id");
> qobject_incref(mon->mc->id);
More contortions caused by iterator use...
next prev parent reply other threads:[~2010-06-02 7:39 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-01 20:41 [Qemu-devel] [PATCH 0/9]: QMP: Replace client argument checker Luiz Capitulino
2010-06-01 20:41 ` [Qemu-devel] [PATCH 1/9] QDict: Introduce qdict_get_try_bool() Luiz Capitulino
2010-06-02 6:35 ` Markus Armbruster
2010-06-02 13:53 ` Luiz Capitulino
2010-06-01 20:41 ` [Qemu-devel] [PATCH 2/9] Monitor: handle optional '-' arg as a bool Luiz Capitulino
2010-06-01 20:41 ` [Qemu-devel] [PATCH 3/9] QMP: First half of the new argument checking code Luiz Capitulino
2010-06-02 6:59 ` Markus Armbruster
2010-06-02 13:53 ` Luiz Capitulino
2010-06-03 7:35 ` Markus Armbruster
2010-06-02 7:22 ` Markus Armbruster
2010-06-02 13:53 ` Luiz Capitulino
2010-06-02 14:52 ` Markus Armbruster
2010-06-01 20:41 ` [Qemu-devel] [PATCH 4/9] QMP: Second " Luiz Capitulino
2010-06-02 7:31 ` Markus Armbruster
2010-06-02 13:54 ` Luiz Capitulino
2010-06-02 14:41 ` Markus Armbruster
2010-06-18 20:30 ` [Qemu-devel] Handling the O-type Luiz Capitulino
2010-06-21 8:12 ` Markus Armbruster
2010-06-21 15:36 ` Luiz Capitulino
2010-06-21 16:50 ` Markus Armbruster
2010-06-01 20:41 ` [Qemu-devel] [PATCH 5/9] QMP: Drop old client argument checker Luiz Capitulino
2010-06-01 20:41 ` [Qemu-devel] [PATCH 6/9] QMP: check_opts(): Minor cleanup Luiz Capitulino
2010-06-01 20:41 ` [Qemu-devel] [PATCH 7/9] QError: Introduce QERR_QMP_BAD_INPUT_OBJECT_MEMBER Luiz Capitulino
2010-06-02 7:34 ` Markus Armbruster
2010-06-01 20:41 ` [Qemu-devel] [PATCH 8/9] QMP: Introduce qmp_check_input_obj() Luiz Capitulino
2010-06-02 7:39 ` Markus Armbruster [this message]
2010-06-02 13:55 ` Luiz Capitulino
2010-06-02 14:42 ` Markus Armbruster
2010-06-01 20:41 ` [Qemu-devel] [PATCH 9/9] QMP: Drop old input object checking code Luiz Capitulino
2010-06-02 7:41 ` [Qemu-devel] [PATCH 0/9]: QMP: Replace client argument checker 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=m3vda1evdd.fsf@blackfin.pond.sub.org \
--to=armbru@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=lcapitulino@redhat.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.