提交 b560a9ab 编写于 作者: M Markus Armbruster 提交者: Anthony Liguori

qemu-option: Reject anti-social IDs

Restrict IDs to letters, digits, '-', '.', '_', starting with a
letter.

This takes care of '/' in qdev IDs breaking qbus_find().
Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 1bb65042
...@@ -673,11 +673,31 @@ QemuOpts *qemu_opts_find(QemuOptsList *list, const char *id) ...@@ -673,11 +673,31 @@ QemuOpts *qemu_opts_find(QemuOptsList *list, const char *id)
return NULL; return NULL;
} }
static int id_wellformed(const char *id)
{
int i;
if (!qemu_isalpha(id[0])) {
return 0;
}
for (i = 1; id[i]; i++) {
if (!qemu_isalnum(id[i]) && !strchr("-._", id[i])) {
return 0;
}
}
return 1;
}
QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id, int fail_if_exists) QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id, int fail_if_exists)
{ {
QemuOpts *opts = NULL; QemuOpts *opts = NULL;
if (id) { if (id) {
if (!id_wellformed(id)) {
qerror_report(QERR_INVALID_PARAMETER_VALUE, "id", "an identifier");
error_printf_unless_qmp("Identifiers consist of letters, digits, '-', '.', '_', starting with a letter.\n");
return NULL;
}
opts = qemu_opts_find(list, id); opts = qemu_opts_find(list, id);
if (opts != NULL) { if (opts != NULL) {
if (fail_if_exists) { if (fail_if_exists) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册