qapi: Assert output visitors see only valid enum values
output_type_enum() fails when *obj is not a valid value of the enum type. Should not happen. Drop the check, along with its unit tests. This unmasks qapi_enum_lookup()'s assertion. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20200424084338.26803-9-armbru@redhat.com> [Commit message tweaked]
This commit is contained in:
parent
8b7ce95b46
commit
777d20cfa5
@ -341,15 +341,6 @@ static void output_type_enum(Visitor *v, const char *name, int *obj,
|
||||
int value = *obj;
|
||||
char *enum_str;
|
||||
|
||||
/*
|
||||
* TODO why is this an error, not an assertion? If assertion:
|
||||
* delete, and rely on qapi_enum_lookup()
|
||||
*/
|
||||
if (value < 0 || value >= lookup->size) {
|
||||
error_setg(errp, QERR_INVALID_PARAMETER, name ? name : "null");
|
||||
return;
|
||||
}
|
||||
|
||||
enum_str = (char *)qapi_enum_lookup(lookup, value);
|
||||
visit_type_str(v, name, &enum_str, errp);
|
||||
}
|
||||
|
@ -141,21 +141,6 @@ static void test_visitor_out_enum(TestOutputVisitorData *data,
|
||||
}
|
||||
}
|
||||
|
||||
static void test_visitor_out_enum_errors(TestOutputVisitorData *data,
|
||||
const void *unused)
|
||||
{
|
||||
EnumOne i, bad_values[] = { ENUM_ONE__MAX, -1 };
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) {
|
||||
Error *err = NULL;
|
||||
|
||||
visit_type_EnumOne(data->ov, "unused", &bad_values[i], &err);
|
||||
error_free_or_abort(&err);
|
||||
visitor_reset(data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void test_visitor_out_struct(TestOutputVisitorData *data,
|
||||
const void *unused)
|
||||
{
|
||||
@ -234,26 +219,6 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data,
|
||||
qapi_free_UserDefTwo(ud2);
|
||||
}
|
||||
|
||||
static void test_visitor_out_struct_errors(TestOutputVisitorData *data,
|
||||
const void *unused)
|
||||
{
|
||||
EnumOne bad_values[] = { ENUM_ONE__MAX, -1 };
|
||||
UserDefOne u = {0};
|
||||
UserDefOne *pu = &u;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) {
|
||||
Error *err = NULL;
|
||||
|
||||
u.has_enum1 = true;
|
||||
u.enum1 = bad_values[i];
|
||||
visit_type_UserDefOne(data->ov, "unused", &pu, &err);
|
||||
error_free_or_abort(&err);
|
||||
visitor_reset(data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void test_visitor_out_list(TestOutputVisitorData *data,
|
||||
const void *unused)
|
||||
{
|
||||
@ -821,14 +786,10 @@ int main(int argc, char **argv)
|
||||
&out_visitor_data, test_visitor_out_no_string);
|
||||
output_visitor_test_add("/visitor/output/enum",
|
||||
&out_visitor_data, test_visitor_out_enum);
|
||||
output_visitor_test_add("/visitor/output/enum-errors",
|
||||
&out_visitor_data, test_visitor_out_enum_errors);
|
||||
output_visitor_test_add("/visitor/output/struct",
|
||||
&out_visitor_data, test_visitor_out_struct);
|
||||
output_visitor_test_add("/visitor/output/struct-nested",
|
||||
&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/list",
|
||||
&out_visitor_data, test_visitor_out_list);
|
||||
output_visitor_test_add("/visitor/output/any",
|
||||
|
@ -203,19 +203,6 @@ static void test_visitor_out_enum(TestOutputVisitorData *data,
|
||||
}
|
||||
}
|
||||
|
||||
static void test_visitor_out_enum_errors(TestOutputVisitorData *data,
|
||||
const void *unused)
|
||||
{
|
||||
EnumOne i, bad_values[] = { ENUM_ONE__MAX, -1 };
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) {
|
||||
Error *err = NULL;
|
||||
|
||||
visit_type_EnumOne(data->ov, "unused", &bad_values[i], &err);
|
||||
error_free_or_abort(&err);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
output_visitor_test_add(const char *testpath,
|
||||
TestOutputVisitorData *data,
|
||||
@ -260,12 +247,6 @@ int main(int argc, char **argv)
|
||||
&out_visitor_data, test_visitor_out_enum, false);
|
||||
output_visitor_test_add("/string-visitor/output/enum-human",
|
||||
&out_visitor_data, test_visitor_out_enum, true);
|
||||
output_visitor_test_add("/string-visitor/output/enum-errors",
|
||||
&out_visitor_data, test_visitor_out_enum_errors,
|
||||
false);
|
||||
output_visitor_test_add("/string-visitor/output/enum-errors-human",
|
||||
&out_visitor_data, test_visitor_out_enum_errors,
|
||||
true);
|
||||
output_visitor_test_add("/string-visitor/output/intList",
|
||||
&out_visitor_data, test_visitor_out_intList, false);
|
||||
output_visitor_test_add("/string-visitor/output/intList-human",
|
||||
|
Loading…
Reference in New Issue
Block a user