mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-02-02 04:41:03 +00:00
0ec9a5adaf
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. Backports commit e58d695e6c3a5cfa0aa2fc91b87ade017ef28b05 from qemu |
||
---|---|---|
.. | ||
common.json | ||
Makefile.objs | ||
qapi-dealloc-visitor.c | ||
qapi-visit-core.c | ||
qmp-input-visitor.c | ||
qmp-output-visitor.c | ||
string-input-visitor.c |