CVS commit by waba: Die slaves, die!! *little buggers* (backport) M +27 -21 slavebase.cpp 1.138.2.1 [POSSIBLY UNSAFE: printf] --- kdelibs/kio/kio/slavebase.cpp #1.138:1.138.2.1 @@ -161,31 +161,35 @@ SlaveBase::SlaveBase( const QCString &pr { if (!getenv("KDE_DEBUG")) + { KCrash::setCrashHandler( sigsegv_handler ); - signal( SIGPIPE, sigpipe_handler ); - - signal(SIGINT,&genericsig_handler); - signal(SIGQUIT,&genericsig_handler); - signal(SIGILL,&genericsig_handler); - signal(SIGTRAP,&genericsig_handler); - signal(SIGABRT,&genericsig_handler); - signal(SIGBUS,&genericsig_handler); - signal(SIGALRM,&genericsig_handler); - signal(SIGTERM,&genericsig_handler); - signal(SIGFPE,&genericsig_handler); + signal(SIGILL,&sigsegv_handler); + signal(SIGTRAP,&sigsegv_handler); + signal(SIGABRT,&sigsegv_handler); + signal(SIGBUS,&sigsegv_handler); + signal(SIGALRM,&sigsegv_handler); + signal(SIGFPE,&sigsegv_handler); #ifdef SIGPOLL - signal(SIGPOLL, &genericsig_handler); + signal(SIGPOLL, &sigsegv_handler); #endif #ifdef SIGSYS - signal(SIGSYS, &genericsig_handler); + signal(SIGSYS, &sigsegv_handler); #endif #ifdef SIGVTALRM - signal(SIGVTALRM, &genericsig_handler); + signal(SIGVTALRM, &sigsegv_handler); #endif #ifdef SIGXCPU - signal(SIGXCPU, &genericsig_handler); + signal(SIGXCPU, &sigsegv_handler); #endif #ifdef SIGXFSZ - signal(SIGXFSZ, &genericsig_handler); + signal(SIGXFSZ, &sigsegv_handler); #endif + } + + signal( SIGPIPE, sigpipe_handler ); + + signal(SIGINT,&genericsig_handler); + signal(SIGQUIT,&genericsig_handler); + signal(SIGTERM,&genericsig_handler); + globalSlave=this; @@ -658,10 +662,12 @@ void SlaveBase::delCachedAuthentication( } -void SlaveBase::sigsegv_handler (int) +void SlaveBase::sigsegv_handler(int sig) { - signal(SIGSEGV,SIG_IGN); + signal(sig,SIG_DFL); // Next one kills // Debug and printf should be avoided because they might // call malloc.. and get in a nice recursive malloc loop - write(2, "kioslave : ###############SEG FAULT#############\n", 49); + char buffer[80]; + snprintf(buffer, sizeof(buffer), "kioslave: ####### CRASH ###### pid = %d signal = %d\n", getpid(), sig); + write(2, buffer, strlen(buffer)); ::exit(1); }