qom: Check for wellformed id in user_creatable_add_type()
Most code paths for creating a user creatable object go through QemuOpts, which ensures that the provided 'id' option is actually a valid identifier. However, there are some code paths that don't go through QemuOpts: qemu-storage-daemon --object (since commit8db1efd3
) and QMP object-add (since it was first introduced in commitcff8b2c6
). We need to have the same validity check for those, too. This adds the check and makes it print the same error message as QemuOpts on failure. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20210302171623.49709-1-kwolf@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
a9b1315f86
commit
0bd5a2eb79
@ -8,6 +8,7 @@
|
||||
#include "qapi/qobject-input-visitor.h"
|
||||
#include "qom/object_interfaces.h"
|
||||
#include "qemu/help_option.h"
|
||||
#include "qemu/id.h"
|
||||
#include "qemu/module.h"
|
||||
#include "qemu/option.h"
|
||||
#include "qapi/opts-visitor.h"
|
||||
@ -41,11 +42,19 @@ Object *user_creatable_add_type(const char *type, const char *id,
|
||||
const QDict *qdict,
|
||||
Visitor *v, Error **errp)
|
||||
{
|
||||
ERRP_GUARD();
|
||||
Object *obj;
|
||||
ObjectClass *klass;
|
||||
const QDictEntry *e;
|
||||
Error *local_err = NULL;
|
||||
|
||||
if (id != NULL && !id_wellformed(id)) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "id", "an identifier");
|
||||
error_append_hint(errp, "Identifiers consist of letters, digits, "
|
||||
"'-', '.', '_', starting with a letter.\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
klass = object_class_by_name(type);
|
||||
if (!klass) {
|
||||
error_setg(errp, "invalid object type: %s", type);
|
||||
|
Loading…
Reference in New Issue
Block a user