From: Peter Crosthwaite Date: Wed, 22 May 2013 01:19:16 +0000 (+1000) Subject: qom/object: Don't poll cast cache for NULL objects X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=95916abcf428fb03644468c7fbce64356c6483c0;p=qemu.git qom/object: Don't poll cast cache for NULL objects object_dynamic_cast_assert used to be tolerant of NULL objects and not assert. It's clear from the implementation that this is the expected behavior. The preceding check of the cast cache dereferences obj however causing a segfault. Fix by conditionalizing the cast cache logic on obj being non-null. Signed-off-by: Peter Crosthwaite Reviewed-by: Andreas Färber Reviewed-by: Anthony Liguori Reviewed-by: Paolo Bonzini Reviewed-by: Edgar E. Iglesias Message-id: 8e2bef6a55753869c50bfa32226f7fcf0439ca62.1369183592.git.peter.crosthwaite@xilinx.com Signed-off-by: Anthony Liguori --- diff --git a/qom/object.c b/qom/object.c index ec88231fa9..803b94bb66 100644 --- a/qom/object.c +++ b/qom/object.c @@ -442,7 +442,7 @@ Object *object_dynamic_cast_assert(Object *obj, const char *typename, int i; Object *inst; - for (i = 0; i < OBJECT_CLASS_CAST_CACHE; i++) { + for (i = 0; obj && i < OBJECT_CLASS_CAST_CACHE; i++) { if (obj->class->cast_cache[i] == typename) { goto out; } @@ -458,7 +458,7 @@ Object *object_dynamic_cast_assert(Object *obj, const char *typename, assert(obj == inst); - if (obj == inst) { + if (obj && obj == inst) { for (i = 1; i < OBJECT_CLASS_CAST_CACHE; i++) { obj->class->cast_cache[i - 1] = obj->class->cast_cache[i]; }