提交 c6aed983 编写于 作者: S Stefan Hajnoczi 提交者: Andreas Färber

qom: Don't make link NULL on object_property_set_link() failure

The error behavior of object_property_set_link() is dangerous.  It sets
the link property object to NULL if an error occurs.  A setter function
should either succeed or fail, it shouldn't leave the value NULL on
failure.
Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: NAndreas Färber <afaerber@suse.de>
上级 f5ec6704
......@@ -1080,27 +1080,28 @@ static Object *object_resolve_link(Object *obj, const char *name,
static void object_set_link_property(Object *obj, Visitor *v, void *opaque,
const char *name, Error **errp)
{
Error *local_err = NULL;
Object **child = opaque;
Object *old_target;
char *path;
visit_type_str(v, &path, name, errp);
Object *old_target = *child;
Object *new_target = NULL;
char *path = NULL;
old_target = *child;
*child = NULL;
visit_type_str(v, &path, name, &local_err);
if (strcmp(path, "") != 0) {
Object *target;
target = object_resolve_link(obj, name, path, errp);
if (target) {
object_ref(target);
*child = target;
}
if (!local_err && strcmp(path, "") != 0) {
new_target = object_resolve_link(obj, name, path, &local_err);
}
g_free(path);
if (local_err) {
error_propagate(errp, local_err);
return;
}
if (new_target) {
object_ref(new_target);
}
*child = new_target;
if (old_target != NULL) {
object_unref(old_target);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册