From e1c8237df5395f6a453f18109bd9dd33fb2a397c Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 25 Aug 2015 20:00:46 +0200 Subject: [PATCH] qom: Fix invalid error check in property_get_str() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Markus Armbruster Reviewed-by: Eric Blake Cc: qemu-stable@nongnu.org Signed-off-by: Andreas Färber --- qom/object.c | 12 ++++++++---- 1 file 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,