Fix crashes and resource leaks in jq_testsuite (#3509)
- Fix segfault when --skip/--take is the last argument. - Fix FILE handle leak: opened test files were never closed. - Support running multiple test files in one invocation.
This commit is contained in:
1 parent
b6a9e260cd
commit
cec6b0f346
1 file changed
+25
-16
+25
-16
@@ -19,28 +19,37 @@ static void run_jq_pthread_tests(void);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
int jq_testsuite(jv libdirs, int verbose, int argc, char* argv[]) {
|
int jq_testsuite(jv libdirs, int verbose, int argc, char* argv[]) {
|
||||||
FILE *testdata = stdin;
|
|
||||||
int skip = -1;
|
int skip = -1;
|
||||||
int take = -1;
|
int take = -1;
|
||||||
|
int nfiles = 0;
|
||||||
jv_test();
|
jv_test();
|
||||||
if (argc > 0) {
|
for (int i = 0; i < argc; i++) {
|
||||||
for(int i = 0; i < argc; i++) {
|
if (!strcmp(argv[i], "--skip")) {
|
||||||
if (!strcmp(argv[i], "--skip")) {
|
if (++i >= argc) {
|
||||||
skip = atoi(argv[i+1]);
|
fprintf(stderr, "--skip requires an argument\n");
|
||||||
i++;
|
exit(1);
|
||||||
} else if (!strcmp(argv[i], "--take")) {
|
|
||||||
take = atoi(argv[i+1]);
|
|
||||||
i++;
|
|
||||||
} else {
|
|
||||||
testdata = fopen(argv[i], "r");
|
|
||||||
if (!testdata) {
|
|
||||||
perror("fopen");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
skip = atoi(argv[i]);
|
||||||
|
} else if (!strcmp(argv[i], "--take")) {
|
||||||
|
if (++i >= argc) {
|
||||||
|
fprintf(stderr, "--take requires an argument\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
take = atoi(argv[i]);
|
||||||
|
} else {
|
||||||
|
FILE *testdata = fopen(argv[i], "r");
|
||||||
|
if (!testdata) {
|
||||||
|
perror("fopen");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
run_jq_tests(jv_copy(libdirs), verbose, testdata, skip, take);
|
||||||
|
fclose(testdata);
|
||||||
|
nfiles++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
run_jq_tests(libdirs, verbose, testdata, skip, take);
|
if (nfiles == 0)
|
||||||
|
run_jq_tests(jv_copy(libdirs), verbose, stdin, skip, take);
|
||||||
|
jv_free(libdirs);
|
||||||
run_jq_start_state_tests();
|
run_jq_start_state_tests();
|
||||||
run_jq_compile_args_tests();
|
run_jq_compile_args_tests();
|
||||||
run_jq_recompile_tests();
|
run_jq_recompile_tests();
|
||||||
|
|||||||
Reference in new issue
Block a user