diff --git a/src/signal_handler.c b/src/signal_handler.c
index c2332d904cc91886dccb4d9d4e0ed10fa93358de..e006be2ce07e9ea5c3be6d4158e70d48cdd0f5a5 100644
--- a/src/signal_handler.c
+++ b/src/signal_handler.c
@@ -310,6 +310,13 @@ static RETSIGTYPE receive_signal(int signum)
 {
   int tmp;
 
+  if ((signum < 0) || (signum >= MAX_SIGNALS)) {
+    // Some OSs (Solaris 2.6) send a bad signum sometimes.
+    // SIGCHLD is the safest signal to substitute.
+    //	/grubba 1998-05-19
+    signum = SIGCHLD;
+  }
+
   tmp=firstsig+1;
   if(tmp == SIGNAL_BUFFER) tmp=0;
   if(tmp != lastsig)