qemu-e2k/qapi
Eric Blake e58d695e6c qapi: Guarantee NULL obj on input visitor callback error
Our existing input visitors were not very consistent on errors in a
function taking 'TYPE **obj'.  These are start_struct(),
start_alternate(), type_str(), and type_any().  next_list() is
similar, but can't fail (see commit 08f9541).  While all of them set
'*obj' to allocated storage on success, it was not obvious whether
'*obj' was guaranteed safe on failure, or whether it was left
uninitialized.  But a future patch wants to guarantee that
visit_type_FOO() does not leak a partially-constructed obj back to
the caller; it is easier to implement this if we can reliably state
that input visitors assign '*obj' regardless of success or failure,
and that on failure *obj is NULL.  Add assertions to enforce
consistency in the final setting of err vs. *obj.

The opts-visitor start_struct() doesn't set an error, but it
also was doing a weird check for 0 size; all callers pass in
non-zero size if obj is non-NULL.

The testsuite has at least one spot where we no longer need
to pre-initialize a variable prior to a visit; valgrind confirms
that the test is still fine with the cleanup.

A later patch will document the design constraint implemented
here.

Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <1461879932-9020-3-git-send-email-eblake@redhat.com>
[visit_start_alternate()'s assertion tightened, commit message tweaked]
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-05-12 09:47:54 +02:00
..
block-core.json block: add generic full disk encryption driver 2016-03-30 12:11:26 +02:00
block.json
common.json
crypto.json
event.json
introspect.json qapi: Use anonymous bases in QMP flat unions 2016-03-18 10:29:26 +01:00
Makefile.objs
opts-visitor.c qapi: Guarantee NULL obj on input visitor callback error 2016-05-12 09:47:54 +02:00
qapi-dealloc-visitor.c qapi-visit: Add visitor.type classification 2016-05-12 09:47:54 +02:00
qapi-util.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
qapi-visit-core.c qapi: Guarantee NULL obj on input visitor callback error 2016-05-12 09:47:54 +02:00
qmp-dispatch.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
qmp-event.c
qmp-input-visitor.c qapi: Guarantee NULL obj on input visitor callback error 2016-05-12 09:47:54 +02:00
qmp-output-visitor.c qapi-visit: Add visitor.type classification 2016-05-12 09:47:54 +02:00
qmp-registry.c
rocker.json
string-input-visitor.c qapi: Guarantee NULL obj on input visitor callback error 2016-05-12 09:47:54 +02:00
string-output-visitor.c qapi-visit: Add visitor.type classification 2016-05-12 09:47:54 +02:00
trace.json