Eric Blake <ebl...@redhat.com> writes: > Add a test that proves (at least when run under valgrind) that > we are correctly handling allocated memory even when a visit > is aborted in the middle for whatever other reason. > > See commit f24582d "qapi: fix double free in > qmp_output_visitor_cleanup()" for a fix that was lacking > testsuite exposure prior to this patch. > > Signed-off-by: Eric Blake <ebl...@redhat.com> > --- > tests/test-qmp-output-visitor.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/tests/test-qmp-output-visitor.c b/tests/test-qmp-output-visitor.c > index f7213d2..2368171 100644 > --- a/tests/test-qmp-output-visitor.c > +++ b/tests/test-qmp-output-visitor.c > @@ -254,6 +254,16 @@ static void > test_visitor_out_struct_errors(TestOutputVisitorData *data, > } > > > +static void test_visitor_out_partial_visit(TestOutputVisitorData *data, > + const void *unused) > +{ > + /* Check that aborting mid-visit doesn't leak or double-free */ > + visit_start_struct(data->ov, NULL, NULL, 0, &error_abort); > + visit_start_struct(data->ov, "nested", NULL, 0, &error_abort); > + visitor_reset(data);
Add a second test that additionally visits a member? Or is visiting the "nested" member enough? > +} > + > + > static void test_visitor_out_list(TestOutputVisitorData *data, > const void *unused) > { > @@ -817,6 +827,8 @@ int main(int argc, char **argv) > &out_visitor_data, > test_visitor_out_struct_nested); > output_visitor_test_add("/visitor/output/struct-errors", > &out_visitor_data, > test_visitor_out_struct_errors); > + output_visitor_test_add("/visitor/output/partial-visit", > + &out_visitor_data, > test_visitor_out_partial_visit); > output_visitor_test_add("/visitor/output/list", > &out_visitor_data, test_visitor_out_list); > output_visitor_test_add("/visitor/output/any", Would you be willing to do the same for lists and alternates? Speaking of alternates, visitor.h's virtual walk example covers struct and list, but not alternate.