diff options
author | Markus Armbruster <armbru@redhat.com> | 2015-08-25 20:00:46 +0200 |
---|---|---|
committer | Andreas Färber <afaerber@suse.de> | 2015-09-19 08:10:12 +0200 |
commit | e1c8237df5395f6a453f18109bd9dd33fb2a397c (patch) | |
tree | 61c1ceb62a882b7258b177c26fb7b41c37d4ed66 | |
parent | 4715d42efe8632b0f9d2594a80e917de45e4ef88 (diff) |
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 in 6a146eb, 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>
-rw-r--r-- | qom/object.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/qom/object.c b/qom/object.c index f28d703826..48053281ef 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1612,12 +1612,16 @@ static void property_get_str(Object *obj, Visitor *v, void *opaque, { StringProperty *prop = opaque; char *value; + Error *err = NULL; - value = prop->get(obj, errp); - if (value) { - visit_type_str(v, &value, name, errp); - g_free(value); + value = prop->get(obj, &err); + if (err) { + error_propagate(errp, err); + return; } + + visit_type_str(v, &value, name, errp); + g_free(value); } static void property_set_str(Object *obj, Visitor *v, void *opaque, |