Program: 8528
Project: 8528
Buggy source:
@Override public void run(){
  if (threadFerry != null) {
    threadFerry.doInDestThread();
  }
  RopRequestContext ropRequestContext=null;
  try {
    ropRequestContext=requestContextBuilder.buildBySysParams(ropContext,servletRequest,servletResponse);
    MainError mainError=securityManager.validateSystemParameters(ropRequestContext);
    if (mainError != null) {
      ropRequestContext.setRopResponse(new ErrorResponse(mainError));
    }
 else {
      requestContextBuilder.bindBusinessParams(ropRequestContext);
      mainError=securityManager.validateOther(ropRequestContext);
      if (mainError != null) {
        ropRequestContext.setRopResponse(new ErrorResponse(mainError));
      }
 else {
        firePreDoServiceEvent(ropRequestContext);
        invokeBeforceServiceOfInterceptors(ropRequestContext);
        if (ropRequestContext.getRopResponse() == null) {
          ropRequestContext.setRopResponse(doService(ropRequestContext));
          invokeBeforceResponseOfInterceptors(ropRequestContext);
        }
      }
    }
    writeResponse(ropRequestContext.getRopResponse(),servletResponse,ropRequestContext.getMessageFormat(),jsonpCallback);
  }
 catch (  Throwable e) {
    String method=ropRequestContext.getMethod();
    Locale locale=ropRequestContext.getLocale();
    ServiceUnavailableErrorResponse ropResponse=new ServiceUnavailableErrorResponse(method,locale,e);
    invokeBeforceResponseOfInterceptors(ropRequestContext);
    writeResponse(ropResponse,servletResponse,ropRequestContext.getMessageFormat(),jsonpCallback);
  }
 finally {
    if (ropRequestContext != null) {
      ropRequestContext.setServiceEndTime(System.currentTimeMillis());
      invokeTimesController.caculateInvokeTimes(ropRequestContext.getAppKey(),ropRequestContext.getSession());
      fireAfterDoServiceEvent(ropRequestContext);
    }
  }
}

Fixed version (ground truth):
@Override public void run(){
  if (threadFerry != null) {
    threadFerry.doInDestThread();
  }
  RopRequestContext ropRequestContext=null;
  try {
    ropRequestContext=requestContextBuilder.buildBySysParams(ropContext,servletRequest,servletResponse);
    MainError mainError=securityManager.validateSystemParameters(ropRequestContext);
    if (mainError != null) {
      ropRequestContext.setRopResponse(new ErrorResponse(mainError));
    }
 else {
      requestContextBuilder.bindBusinessParams(ropRequestContext);
      mainError=securityManager.validateOther(ropRequestContext);
      if (mainError != null) {
        ropRequestContext.setRopResponse(new ErrorResponse(mainError));
      }
 else {
        firePreDoServiceEvent(ropRequestContext);
        invokeBeforceServiceOfInterceptors(ropRequestContext);
        if (ropRequestContext.getRopResponse() == null) {
          ropRequestContext.setRopResponse(doService(ropRequestContext));
          invokeBeforceResponseOfInterceptors(ropRequestContext);
        }
      }
    }
    writeResponse(ropRequestContext.getRopResponse(),servletResponse,ropRequestContext.getMessageFormat(),jsonpCallback);
  }
 catch (  Throwable e) {
    if (ropRequestContext != null) {
      String method=ropRequestContext.getMethod();
      Locale locale=ropRequestContext.getLocale();
      ServiceUnavailableErrorResponse ropResponse=new ServiceUnavailableErrorResponse(method,locale,e);
      invokeBeforceResponseOfInterceptors(ropRequestContext);
      writeResponse(ropResponse,servletResponse,ropRequestContext.getMessageFormat(),jsonpCallback);
    }
 else {
      throw new RopException("String_Node_Str",e);
    }
  }
 finally {
    if (ropRequestContext != null) {
      ropRequestContext.setServiceEndTime(System.currentTimeMillis());
      invokeTimesController.caculateInvokeTimes(ropRequestContext.getAppKey(),ropRequestContext.getSession());
      fireAfterDoServiceEvent(ropRequestContext);
    }
  }
}