From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:49210) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uefv1-0001V2-53 for qemu-devel@nongnu.org; Tue, 21 May 2013 02:19:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uefuz-0000Is-Vt for qemu-devel@nongnu.org; Tue, 21 May 2013 02:19:31 -0400 Received: from mail-pd0-f177.google.com ([209.85.192.177]:52736) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UeflJ-0005dT-1i for qemu-devel@nongnu.org; Tue, 21 May 2013 02:09:29 -0400 Received: by mail-pd0-f177.google.com with SMTP id u11so267593pdi.8 for ; Mon, 20 May 2013 23:09:28 -0700 (PDT) Sender: Peter Crosthwaite From: peter.crosthwaite@xilinx.com Date: Tue, 21 May 2013 16:05:08 +1000 Message-Id: Subject: [Qemu-devel] [PATCH v1 1/1] qom/object: Don't poll cast cache for NULL objects List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: edgar.iglesias@gmail.com, aliguori@us.ibm.com From: Peter Crosthwaite object_dymamic_cast_assert used to be tolerant of NULL objects and not assert. Its 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 --- qom/object.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qom/object.c b/qom/object.c index ec88231..803b94b 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]; } -- 1.8.3.rc1.44.gb387c77.dirty