tests: add fuzzing to visitor tests
Perform input tests on random data. Improvement to code coverage for qapi/string-input-visitor.c is about 3 percentage points. Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
0c3c89d649
commit
3f0f31a0f1
@ -165,6 +165,53 @@ static void test_visitor_in_enum(TestInputVisitorData *data,
|
||||
data->siv = NULL;
|
||||
}
|
||||
|
||||
/* Try to crash the visitors */
|
||||
static void test_visitor_in_fuzz(TestInputVisitorData *data,
|
||||
const void *unused)
|
||||
{
|
||||
int64_t ires;
|
||||
bool bres;
|
||||
double nres;
|
||||
char *sres;
|
||||
EnumOne eres;
|
||||
Error *errp = NULL;
|
||||
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, &ires, NULL, &errp);
|
||||
|
||||
v = visitor_input_test_init(data, buf);
|
||||
visit_type_bool(v, &bres, NULL, &errp);
|
||||
visitor_input_teardown(data, NULL);
|
||||
|
||||
v = visitor_input_test_init(data, buf);
|
||||
visit_type_number(v, &nres, NULL, &errp);
|
||||
|
||||
v = visitor_input_test_init(data, buf);
|
||||
visit_type_str(v, &sres, NULL, &errp);
|
||||
g_free(sres);
|
||||
|
||||
v = visitor_input_test_init(data, buf);
|
||||
visit_type_EnumOne(v, &eres, NULL, &errp);
|
||||
visitor_input_teardown(data, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void input_visitor_test_add(const char *testpath,
|
||||
TestInputVisitorData *data,
|
||||
void (*test_func)(TestInputVisitorData *data, const void *user_data))
|
||||
@ -189,6 +236,8 @@ int main(int argc, char **argv)
|
||||
&in_visitor_data, test_visitor_in_string);
|
||||
input_visitor_test_add("/string-visitor/input/enum",
|
||||
&in_visitor_data, test_visitor_in_enum);
|
||||
input_visitor_test_add("/string-visitor/input/fuzz",
|
||||
&in_visitor_data, test_visitor_in_fuzz);
|
||||
|
||||
g_test_run();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user