/*xcatf system by (Dazzle)Darien
 *This uses my xprintf technology to stop
 *strcat overflows... enjoy
 */

in merc.h

#define MAS	       262144

/* xcatf memory overflow detection system, Replacement for strcat */
void safe_strcatf (const char *file, const char *function, int line,int size, char *prev, char *next, ... );
# define xcatf(var, args...)    safe_strcatf(__FILE__,__FUNCTION__,__LINE__,sizeof(var), (var),##args )
# define xcatf_2(var, args...)    safe_strcatf(__FILE__,__FUNCTION__,__LINE__,MAS, (var),##args )


in handler.c

/* xcatf a formated string */
void safe_strcatf (const char *file, const char *function, int line,int size, char *prev, char *next, ... )
{
    char buf [MAS];
    va_list args;

    va_start ( args, next );
    vsnprintf ( buf, MAS, next, args );
    va_end ( args );

  /*Max Alloc Size is allot!*/
  if(size > MAS)
  {
    char egbug[MSL];
    log_string(LOG_BUG, "xcatf size greater then MAS!!!!\n\r");
    log_string(LOG_BUG, "ERROR: System Memory Corrupted by Overflow, through xcatf.\n\r");
    log_string(LOG_BUG, "Memcheck: xcatf:File %s, Function %s, Line %d.\n\r",file,function,line);
    xprintf(egbug, "Memcheck: System memory corrupted by overflow through xcatf: File: %s Function: %s Line: %d",file, function,line);
    wiznet(egbug,NULL,NULL,WIZ_MEMCHECK,0,0);
    return;
  }

  if ((unsigned)size < strlen(buf)+1) 
  {
    char egbug[MSL];
    log_string(LOG_BUG, "XCATF error: fmt %s.\n\r",next);
    log_string(LOG_BUG, "ERROR: System Memory Corrupted by Overflow, through xcatf.\n\r");
    log_string(LOG_BUG, "Memcheck: xcatf: File %s, Function %s, Line %d.\n\r",file,function,line);
    /*Yes, this is a potential loop bug if infact the xcatf does collapse in on itself..*/
    xprintf(egbug, "Memcheck: System memory corrupted by overflow through xcatf: File: %s Function: %s Line: %d",file,function,line);
    wiznet(egbug,NULL,NULL,WIZ_MEMCHECK,0,0);
    return;
  }

    strcat ( prev, buf );

    /*Just double checking.*/
   if( strlen( prev ) > (unsigned)size - 1 )
   {
	 char egbug[MSL];
   	 log_string(LOG_BUG, "XCATF error: fmt %s.\n\r",next);
	 log_string(LOG_BUG, "ERROR: System Memory Corrupted by Overflow, through xcatf.\n\r");
	 log_string(LOG_BUG, "Memcheck: Xcatf: File %s, Function %s, Line %d.\n\r",file, function,line);
	 /*Yes, this is a potential loop bug if infact the xcatf does collapse in on itself..*/
	 xprintf(egbug, "Memcheck: System memory corrupted by overflow through xcatf: File: %s Function: %s Line: %d",file, function,line);
	 wiznet(egbug,NULL,NULL,WIZ_MEMCHECK,0,0);
   }

}