Skip to content

Commit

Permalink
qapi: Simplify how qmp_dispatch() gets the request ID
Browse files Browse the repository at this point in the history
We convert the request object to a QDict twice: first in
qmp_dispatch() to get the request ID, and then again in
qmp_dispatch_check_obj(), which converts to QDict, then checks and
returns it.  We can't get the request ID from the latter, because it's
null when the qdict flunks the checks.

Move the checked conversion to QDict from qmp_dispatch_check_obj() to
qmp_dispatch(), and drop the duplicate there.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20200317115459.31821-24-armbru@redhat.com>
  • Loading branch information
Markus Armbruster committed Mar 17, 2020
1 parent d322603 commit a62c617
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions qapi/qmp-dispatch.c
Expand Up @@ -19,20 +19,13 @@
#include "sysemu/runstate.h"
#include "qapi/qmp/qbool.h"

static QDict *qmp_dispatch_check_obj(const QObject *request, bool allow_oob,
static QDict *qmp_dispatch_check_obj(QDict *dict, bool allow_oob,
Error **errp)
{
const char *exec_key = NULL;
const QDictEntry *ent;
const char *arg_name;
const QObject *arg_obj;
QDict *dict;

dict = qobject_to(QDict, request);
if (!dict) {
error_setg(errp, "QMP input must be a JSON object");
return NULL;
}

for (ent = qdict_first(dict); ent;
ent = qdict_next(dict, ent)) {
Expand Down Expand Up @@ -103,13 +96,21 @@ QDict *qmp_dispatch(QmpCommandList *cmds, QObject *request,
const char *command;
QDict *args;
QmpCommand *cmd;
QDict *dict = qobject_to(QDict, request);
QObject *id = dict ? qdict_get(dict, "id") : NULL;
QDict *dict;
QObject *id;
QObject *ret = NULL;
QDict *rsp = NULL;

dict = qmp_dispatch_check_obj(request, allow_oob, &err);
dict = qobject_to(QDict, request);
if (!dict) {
id = NULL;
error_setg(&err, "QMP input must be a JSON object");
goto out;
}

id = qdict_get(dict, "id");

if (!qmp_dispatch_check_obj(dict, allow_oob, &err)) {
goto out;
}

Expand Down

0 comments on commit a62c617

Please sign in to comment.