Program: 5828
Project: 5828
Buggy source:
public void run(){
  if (executed)   return;
  executed=true;
  log.error("String_Node_Str",event.toString());
  Context context=sourceContext.getContextManager().retrieveContext(sourceContext,null,false,false);
  FaultMessage emsg=event.getMessage();
  FaultMessage m=emsg;
  Map<String,Object> extendedData=emsg != null ? emsg.getExtended() : null;
  do {
    if (m != null && m.getCode() != null && m.isSecurityFault()) {
      emsg=m;
      extendedData=emsg != null ? emsg.getExtended() : null;
      break;
    }
    if (m != null && m.getCause() instanceof FaultEvent)     m=(FaultMessage)((FaultEvent)m.getCause()).getCause();
 else     if (m.getCause() instanceof FaultMessage)     m=(FaultMessage)m.getCause();
 else     m=null;
  }
 while (m != null);
  serverSession.handleFaultEvent(event,emsg);
  serverSession.handleFault(context,componentName,operation,emsg);
  boolean handled=false;
  Fault fault=new Fault(emsg.getCode(),emsg.getDescription(),emsg.getDetails());
  fault.setContent(event.getMessage());
  fault.setCause(event.getCause());
  TideFaultEvent faultEvent=new TideFaultEvent(context,serverSession,componentResponder,fault,extendedData);
  if (tideResponder != null) {
    tideResponder.fault(faultEvent);
    if (faultEvent.isDefaultPrevented())     handled=true;
  }
  if (!handled) {
    ExceptionHandler[] exceptionHandlers=context.getContextManager().getContext(null).allByType(ExceptionHandler.class);
    if (exceptionHandlers != null && emsg != null) {
      for (      ExceptionHandler handler : exceptionHandlers) {
        if (handler.accepts(emsg)) {
          handler.handle(context,emsg,faultEvent);
          handled=true;
          break;
        }
      }
      if (!handled)       log.error("String_Node_Str" + emsg.getCode() + "String_Node_Str"+ emsg.getDescription());
    }
 else     if (exceptionHandlers != null && exceptionHandlers.length > 0 && event.getMessage() instanceof FaultMessage) {
      exceptionHandlers[0].handle(context,(FaultMessage)event.getMessage(),faultEvent);
    }
 else {
      log.error("String_Node_Str" + event.toString());
    }
  }
  if (!handled && !serverSession.isLogoutInProgress())   context.getEventBus().raiseEvent(context,ServerSession.CONTEXT_FAULT,event.getMessage());
  serverSession.tryLogout();
}

Fixed version (ground truth):
public void run(){
  if (executed)   return;
  executed=true;
  log.error("String_Node_Str",event.toString());
  Context context=sourceContext.getContextManager().retrieveContext(sourceContext,null,false,false);
  FaultMessage emsg=null;
  Map<String,Object> extendedData=null;
  if (event instanceof FaultEvent) {
    emsg=((FaultEvent)event).getMessage();
    FaultMessage m=emsg;
    extendedData=emsg != null ? emsg.getExtended() : null;
    do {
      if (m != null && m.getCode() != null && m.isSecurityFault()) {
        emsg=m;
        extendedData=emsg != null ? emsg.getExtended() : null;
        break;
      }
      if (m != null && m.getCause() instanceof FaultEvent)       m=(FaultMessage)((FaultEvent)m.getCause()).getCause();
 else       if (m.getCause() instanceof FaultMessage)       m=(FaultMessage)m.getCause();
 else       m=null;
    }
 while (m != null);
    serverSession.handleFaultEvent((FaultEvent)event,emsg);
  }
 else   serverSession.handleIssueEvent((IssueEvent)event);
  serverSession.handleFault(context,componentName,operation,emsg);
  boolean handled=false;
  Fault fault=null;
  if (event instanceof FaultEvent) {
    fault=new Fault(emsg.getCode(),emsg.getDescription(),emsg.getDetails());
    fault.setContent(((FaultEvent)event).getMessage());
    fault.setCause(((FaultEvent)event).getCause());
  }
 else   if (event.getType() == Type.FAILURE) {
    fault=new Fault(Code.CLIENT_CALL_FAILED,null,((FailureEvent)event).getCause() != null ? ((FailureEvent)event).getCause().getMessage() : null);
  }
 else   if (event.getType() == Type.TIMEOUT) {
    fault=new Fault(Code.CLIENT_CALL_TIMED_OUT,null,String.valueOf(((TimeoutEvent)event).getTime()));
  }
 else   if (event.getType() == Type.CANCELLED) {
    fault=new Fault(Code.CLIENT_CALL_CANCELLED,null,null);
  }
  TideFaultEvent faultEvent=new TideFaultEvent(context,serverSession,componentResponder,fault,extendedData);
  if (tideResponder != null) {
    tideResponder.fault(faultEvent);
    if (faultEvent.isDefaultPrevented())     handled=true;
  }
  if (!handled) {
    ExceptionHandler[] exceptionHandlers=context.getContextManager().getContext(null).allByType(ExceptionHandler.class);
    if (exceptionHandlers != null && emsg != null) {
      for (      ExceptionHandler handler : exceptionHandlers) {
        if (handler.accepts(emsg)) {
          handler.handle(context,emsg,faultEvent);
          handled=true;
          break;
        }
      }
      if (!handled)       log.error("String_Node_Str" + emsg.getCode() + "String_Node_Str"+ emsg.getDescription());
    }
 else     if (exceptionHandlers != null && exceptionHandlers.length > 0 && event instanceof FaultEvent && ((FaultEvent)event).getMessage() instanceof FaultMessage) {
      exceptionHandlers[0].handle(context,(FaultMessage)((FaultEvent)event).getMessage(),faultEvent);
    }
 else {
      log.error("String_Node_Str" + event.toString());
    }
  }
  if (!handled && !serverSession.isLogoutInProgress())   context.getEventBus().raiseEvent(context,ServerSession.CONTEXT_FAULT,event instanceof FaultEvent ? ((FaultEvent)event).getMessage() : null);
  serverSession.tryLogout();
}