Commit 73a37d1e authored by Nick Mathewson's avatar Nick Mathewson 🐛
Browse files

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 when tinytest was
parent 198b6354
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
......@@ -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);
if (r == -1) {
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);
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment