mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
Check waitpid return value and exit status in tinytest.c
It's possible for a unit test to report success via its pipe, but to fail as it tries to clean up and exit. Notably, this happens on a leak sanitizer failure. Fixes bug 27658; bugfix on 0.2.2.4-alpha when tinytest was introduced.
This commit is contained in:
parent
198b6354e6
commit
73a37d1e54
6
changes/bug27658
Normal file
6
changes/bug27658
Normal file
@ -0,0 +1,6 @@
|
||||
o Minor bugfixes (testing):
|
||||
- If a unit test running in a subprocess exits abnormally or with a
|
||||
nonzero status code, treat the test as having failed, even if
|
||||
the test reported success. Without this fix, memory leaks don't cause
|
||||
cause the tests to fail, even with LeakSanitizer. Fixes bug 27658;
|
||||
bugfix on 0.2.2.4-alpha.
|
@ -207,12 +207,20 @@ testcase_run_forked_(const struct testgroup_t *group,
|
||||
r = (int)read(outcome_pipe[0], b, 1);
|
||||
if (r == 0) {
|
||||
printf("[Lost connection!] ");
|
||||
return 0;
|
||||
return FAIL;
|
||||
} else if (r != 1) {
|
||||
perror("read outcome from pipe");
|
||||
}
|
||||
waitpid(pid, &status, 0);
|
||||
r = waitpid(pid, &status, 0);
|
||||
close(outcome_pipe[0]);
|
||||
if (r == -1) {
|
||||
perror("waitpid");
|
||||
return FAIL;
|
||||
}
|
||||
if (! WIFEXITED(status) || WEXITSTATUS(status) != 0) {
|
||||
printf("[did not exit cleanly.]");
|
||||
return FAIL;
|
||||
}
|
||||
return b[0]=='Y' ? OK : (b[0]=='S' ? SKIP : FAIL);
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user