/* Try to crash the visitors */ static void test_visitor_in_fuzz(TestInputVisitorData *data, const void *unused) { int64_t ires; intList *ilres; bool bres; double nres; char *sres; EnumOne eres; Visitor *v; unsigned int i; char buf[10000]; for (i = 0; i < 100; i++) { unsigned int j; j = g_test_rand_int_range(0, sizeof(buf) - 1); buf[j] = '\0'; if (j != 0) { for (j--; j != 0; j--) { buf[j - 1] = (char)g_test_rand_int_range(0, 256); } } v = visitor_input_test_init(data, buf); visit_type_int(v, NULL, &ires, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_intList(v, NULL, &ilres, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_bool(v, NULL, &bres, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_number(v, NULL, &nres, NULL); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); sres = NULL; visit_type_str(v, NULL, &sres, NULL); g_free(sres); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); visit_type_EnumOne(v, NULL, &eres, NULL); visitor_input_teardown(data, NULL); } }
static void visit_primitive_list(Visitor *v, void **native, Error **errp) { PrimitiveList *pl = *native; switch (pl->type) { case PTYPE_STRING: visit_type_strList(v, NULL, &pl->value.strings, errp); break; case PTYPE_BOOLEAN: visit_type_boolList(v, NULL, &pl->value.booleans, errp); break; case PTYPE_NUMBER: visit_type_numberList(v, NULL, &pl->value.numbers, errp); break; case PTYPE_INTEGER: visit_type_intList(v, NULL, &pl->value.integers, errp); break; case PTYPE_S8: visit_type_int8List(v, NULL, &pl->value.s8_integers, errp); break; case PTYPE_S16: visit_type_int16List(v, NULL, &pl->value.s16_integers, errp); break; case PTYPE_S32: visit_type_int32List(v, NULL, &pl->value.s32_integers, errp); break; case PTYPE_S64: visit_type_int64List(v, NULL, &pl->value.s64_integers, errp); break; case PTYPE_U8: visit_type_uint8List(v, NULL, &pl->value.u8_integers, errp); break; case PTYPE_U16: visit_type_uint16List(v, NULL, &pl->value.u16_integers, errp); break; case PTYPE_U32: visit_type_uint32List(v, NULL, &pl->value.u32_integers, errp); break; case PTYPE_U64: visit_type_uint64List(v, NULL, &pl->value.u64_integers, errp); break; default: g_assert_not_reached(); } }