From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:55219) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SaObu-0006E9-NA for qemu-devel@nongnu.org; Fri, 01 Jun 2012 05:57:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SaObs-0007SW-VA for qemu-devel@nongnu.org; Fri, 01 Jun 2012 05:57:34 -0400 Received: from cantor2.suse.de ([195.135.220.15]:49887 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SaObs-0007SL-MR for qemu-devel@nongnu.org; Fri, 01 Jun 2012 05:57:32 -0400 Message-ID: <4FC89205.80400@suse.de> Date: Fri, 01 Jun 2012 11:57:25 +0200 From: =?ISO-8859-1?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1338394747-17427-1-git-send-email-imammedo@redhat.com> <4FC6533C.3010207@samsung.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH qom-next] qom: make object cast assert if NULL object is passed as argument List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: pbonzini@redhat.com Cc: aliguori@us.ibm.com, Igor Mitsyanko , alexander_barabash@mentor.com, Markus Armbruster , qemu-devel@nongnu.org, Igor Mammedov Am 31.05.2012 10:30, schrieb Markus Armbruster: > Igor Mitsyanko writes: >=20 >> On 05/30/2012 08:19 PM, Igor Mammedov wrote: >>> without assert it will crash at following point: >>> OBJECT_CHECK(type, obj, name) \ >>> ((type *)object_dynamic_cast_assert(OBJECT(obj), (name))) >>> =3D> object_dynamic_cast(obj, typename) >>> =3D> object_is_type(obj, target_type) >>> =3D> type_is_ancestor(obj->class->type, target_type); >>> ^^^ >>> so abort earlier and print nice message instead of SIGSEGV >>> >>> Signed-off-by: Igor Mammedov >>> --- >>> qom/object.c | 2 ++ >>> 1 files changed, 2 insertions(+), 0 deletions(-) >>> >>> diff --git a/qom/object.c b/qom/object.c >>> index 00bb3b0..444e2fc 100644 >>> --- a/qom/object.c >>> +++ b/qom/object.c >>> @@ -481,6 +481,8 @@ Object *object_dynamic_cast_assert(Object *obj, c= onst char *typename) >>> { >>> Object *inst; >>> >>> + g_assert(obj !=3D NULL); >>> + >>> inst =3D object_dynamic_cast(obj, typename); >>> >>> if (!inst) { >> Makes much sense, but maybe it should be done in OBJECT() cast? Assert >> when we do OBJECT(NULL). >=20 > In my opinion, OBJECT(p) where p is a null pointer is perfectly valid > and should yield a null pointer. Paolo, today OBJECT(p) is a pure C cast. I wonder if that was due to TYPE_OBJECT being NULL at the time. Should we reconsider that on qom-next with your patches to turn TYPE_OBJECT into a regular type? Andreas --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg