diff options
| author | Paolo Bonzini | 2012-03-22 12:51:05 +0100 |
|---|---|---|
| committer | Luiz Capitulino | 2012-03-27 14:13:48 +0200 |
| commit | 8b714d3747e6870db85dd9382adb8ee371633092 (patch) | |
| tree | 5cf89bbeb3516c49b8ae87931aac73e40ce7e5cb /qapi | |
| parent | qapi: fail hard on stack imbalance (diff) | |
| download | qemu-8b714d3747e6870db85dd9382adb8ee371633092.tar.gz qemu-8b714d3747e6870db85dd9382adb8ee371633092.tar.xz qemu-8b714d3747e6870db85dd9382adb8ee371633092.zip | |
qapi: fix memory leak on error
QmpInputVisitor would leak the malloced struct if the stack was
overflowed. This can be easily fixed using error_propagate.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Diffstat (limited to 'qapi')
| -rw-r--r-- | qapi/qmp-input-visitor.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c index b4013ccfc5..ef9288f1e9 100644 --- a/qapi/qmp-input-visitor.c +++ b/qapi/qmp-input-visitor.c @@ -86,6 +86,7 @@ static void qmp_input_start_struct(Visitor *v, void **obj, const char *kind, { QmpInputVisitor *qiv = to_qiv(v); const QObject *qobj = qmp_input_get_object(qiv, name); + Error *err = NULL; if (!qobj || qobject_type(qobj) != QTYPE_QDICT) { error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null", @@ -93,8 +94,9 @@ static void qmp_input_start_struct(Visitor *v, void **obj, const char *kind, return; } - qmp_input_push(qiv, qobj, errp); - if (error_is_set(errp)) { + qmp_input_push(qiv, qobj, &err); + if (err) { + error_propagate(errp, err); return; } |
