From: Peter Krempa Date: Wed, 4 Jul 2018 14:36:37 +0000 (+0200) Subject: qemu: monitor: Make qemuMonitorAddObject more robust against programming errors X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=fac0dacd54c02b842c995d0999d9450d09d1e7cd;p=libvirt.git qemu: monitor: Make qemuMonitorAddObject more robust against programming errors Document and check that @props contains a pointer to a json object and check that both necessary fields are present. Also mark @props as NONNULL. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 3514e9f8a1..bc116e4e2d 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3088,8 +3088,9 @@ qemuMonitorCreateObjectProps(virJSONValuePtr *propsret, /** * qemuMonitorAddObject: * @mon: Pointer to monitor object - * @props: Optional arguments for the given type. The object is consumed and - * the pointer is cleared. + * @props: Pointer to a JSON object holding configuration of the object to add. + * The object must be non-null and contain at least the "qom-type" and + * "id" field. The object is consumed and the pointer is cleared. * @alias: If not NULL, returns the alias of the added object if it was added * successfully to qemu. Caller should free the returned pointer. * @@ -3100,18 +3101,28 @@ qemuMonitorAddObject(qemuMonitorPtr mon, virJSONValuePtr *props, char **alias) { - const char *type = virJSONValueObjectGetString(*props, "qom-type"); - const char *id = virJSONValueObjectGetString(*props, "id"); + const char *type = NULL; + const char *id = NULL; char *tmp = NULL; int ret = -1; + if (!*props) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("object props can't be NULL")); + goto cleanup; + } + + type = virJSONValueObjectGetString(*props, "qom-type"); + id = virJSONValueObjectGetString(*props, "id"); + VIR_DEBUG("type=%s id=%s", NULLSTR(type), NULLSTR(id)); QEMU_CHECK_MONITOR_GOTO(mon, cleanup); - if (!id) { + if (!id || !type) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("missing alias for qemu object '%s'"), NULLSTR(type)); + _("missing alias or qom-type for qemu object '%s'"), + NULLSTR(type)); goto cleanup; } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index e588d73678..e8ed2d044c 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -823,7 +823,8 @@ int qemuMonitorCreateObjectProps(virJSONValuePtr *propsret, int qemuMonitorAddObject(qemuMonitorPtr mon, virJSONValuePtr *props, - char **alias); + char **alias) + ATTRIBUTE_NONNULL(1); int qemuMonitorDelObject(qemuMonitorPtr mon, const char *objalias);