• E
    qapi: Guarantee NULL obj on input visitor callback error · e58d695e
    Eric Blake 提交于
    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 08f9541d).  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: NEric 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: NMarkus Armbruster <armbru@redhat.com>
    e58d695e
string-input-visitor.c 9.1 KB