diff options
author | Markus Armbruster <armbru@redhat.com> | 2015-08-25 20:00:46 +0200 |
---|---|---|
committer | Michael Roth <mdroth@linux.vnet.ibm.com> | 2015-10-20 22:57:42 -0500 |
commit | a479b21c111a87a50203a7413c4e5ec419fc88dd (patch) | |
tree | 1ff44768388ae28045929e592ea9baf5b6e7d936 /qom/object.c | |
parent | d11ff15fd5236bdb82b2def0ecc568290bfdba35 (diff) | |
download | qemu-a479b21c111a87a50203a7413c4e5ec419fc88dd.tar.gz |
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>
(cherry picked from commit e1c8237df5395f6a453f18109bd9dd33fb2a397c)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Diffstat (limited to 'qom/object.c')
-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 c9aedd083c..e14b9d866c 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1593,12 +1593,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, |