From 57f53914a1011bdeeebb091c5e84d0ff7a786885 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sun, 31 Aug 2025 21:01:42 +0900 Subject: [PATCH] testsuite: Fix broken exec_signals_child.c There is no signal 0. The signal mask is 1-32. --- testsuite/tests/rts/exec_signals_child.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/testsuite/tests/rts/exec_signals_child.c b/testsuite/tests/rts/exec_signals_child.c index 4b8400892865..81cdf364f603 100644 --- a/testsuite/tests/rts/exec_signals_child.c +++ b/testsuite/tests/rts/exec_signals_child.c @@ -2,8 +2,11 @@ #include #include -// Prints the state of the signal handlers to stdout -int main() +// Prints the state of the signal handlers to stdout. +// NOTE: We intentionally start at signal 1 (not 0). Signal number 0 is not a +// real signal; passing 0 to sigismember/sigaction is undefined behaviour and +// on Darwin was observed to yield memory corruption / junk bytes in output. +int main(void) { int open = 0, i; sigset_t blockedsigs; @@ -11,7 +14,7 @@ int main() printf("ChildInfo { masked = ["); sigprocmask(SIG_BLOCK, NULL, &blockedsigs); - for(i = 0; i < NSIG; ++i) + for(i = 1; i < NSIG; ++i) { int ret = sigismember(&blockedsigs, i); if(ret >= 0) @@ -26,7 +29,7 @@ int main() printf("], handlers = ["); open = 0; - for(i = 0; i < NSIG; ++i) + for(i = 1; i < NSIG; ++i) { struct sigaction old; if(sigaction(i, NULL, &old) >= 0)