qom: Fix invalid error check in property_get_str()
When a function returns a null pointer on error and only on error, you can do if (!foo(foos, errp)) { ... handle error ... } instead of the more cumbersome Error *err = NULL; if (!foo(foos, &err)) { error_propagate(errp, err); ... handle error ... } A StringProperty's getter, however, may return null on success! We then fail to call visit_type_str(). Screwed up in6a146eb
, v1.1. Fails tests/qom-test in my current, heavily hacked QAPI branch. No reproducer for master known (but I didn't look hard). Cc: Anthony Liguori <anthony@codemonkey.ws> Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Cc: qemu-stable@nongnu.org Signed-off-by: Andreas Färber <afaerber@suse.de> (cherry picked from commite1c8237df5
) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
d11ff15fd5
commit
a479b21c11
12
qom/object.c
12
qom/object.c
|
@ -1593,12 +1593,16 @@ static void property_get_str(Object *obj, Visitor *v, void *opaque,
|
||||||
{
|
{
|
||||||
StringProperty *prop = opaque;
|
StringProperty *prop = opaque;
|
||||||
char *value;
|
char *value;
|
||||||
|
Error *err = NULL;
|
||||||
|
|
||||||
value = prop->get(obj, errp);
|
value = prop->get(obj, &err);
|
||||||
if (value) {
|
if (err) {
|
||||||
visit_type_str(v, &value, name, errp);
|
error_propagate(errp, err);
|
||||||
g_free(value);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
visit_type_str(v, &value, name, errp);
|
||||||
|
g_free(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void property_set_str(Object *obj, Visitor *v, void *opaque,
|
static void property_set_str(Object *obj, Visitor *v, void *opaque,
|
||||||
|
|
Loading…
Reference in New Issue