From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:39846) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RbYH4-0004Do-Fz for qemu-devel@nongnu.org; Fri, 16 Dec 2011 08:56:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RbYH3-000203-90 for qemu-devel@nongnu.org; Fri, 16 Dec 2011 08:56:34 -0500 Received: from mail-gx0-f173.google.com ([209.85.161.173]:43300) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RbYH3-0001zv-1s for qemu-devel@nongnu.org; Fri, 16 Dec 2011 08:56:33 -0500 Received: by ggnk1 with SMTP id k1so3079044ggn.4 for ; Fri, 16 Dec 2011 05:56:32 -0800 (PST) Message-ID: <4EEB4E0C.4050407@codemonkey.ws> Date: Fri, 16 Dec 2011 07:56:28 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <1324036918-2405-1-git-send-email-pbonzini@redhat.com> <1324036918-2405-3-git-send-email-pbonzini@redhat.com> In-Reply-To: <1324036918-2405-3-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 2/8] qapi: protect against NULL QObject in qmp_input_get_object List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: kwolf@redhat.com, qemu-devel@nongnu.org On 12/16/2011 06:01 AM, Paolo Bonzini wrote: > A NULL qobj can occur when a parameter is fetched via qdict_get, but > the parameter is not in the command. By returning NULL, the caller can > choose whether to raise a missing parameter error, an invalid parameter > type error, or use a default value. For example, qom-set could can > use this to reset a property to its default value, though at this time > it will fail with "Invalid parameter type". In any case, anything is > better than crashing! Reviewed-by: Anthony Liguori Regards, Anthony Liguori > > Signed-off-by: Paolo Bonzini > --- > qapi/qmp-input-visitor.c | 10 ++++++---- > 1 files changed, 6 insertions(+), 4 deletions(-) > > diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c > index 8cbc0ab..c78022b 100644 > --- a/qapi/qmp-input-visitor.c > +++ b/qapi/qmp-input-visitor.c > @@ -49,10 +49,12 @@ static const QObject *qmp_input_get_object(QmpInputVisitor *qiv, > qobj = qiv->stack[qiv->nb_stack - 1].obj; > } > > - if (name&& qobject_type(qobj) == QTYPE_QDICT) { > - return qdict_get(qobject_to_qdict(qobj), name); > - } else if (qiv->nb_stack> 0&& qobject_type(qobj) == QTYPE_QLIST) { > - return qlist_entry_obj(qiv->stack[qiv->nb_stack - 1].entry); > + if (qobj) { > + if (name&& qobject_type(qobj) == QTYPE_QDICT) { > + return qdict_get(qobject_to_qdict(qobj), name); > + } else if (qiv->nb_stack> 0&& qobject_type(qobj) == QTYPE_QLIST) { > + return qlist_entry_obj(qiv->stack[qiv->nb_stack - 1].entry); > + } > } > > return qobj;