mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
qapi: protect against NULL QObject in qmp_input_get_object
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 <anthony@codemonkey.ws> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
b1746dddfc
commit
47c6d3ecdf
1 changed files with 6 additions and 4 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue