Program: 16268
Project: 16268
Buggy source:
/** 
 * Process asynchronous update requests from the client.
 * @since 3.0.0
 */
protected void process(Session sess,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
  final String errClient=request.getHeader("String_Node_Str");
  if (errClient != null)   if (log.debugable())   log.debug("String_Node_Str" + errClient + "String_Node_Str"+ Servlets.getDetail(request));
  final WebApp wapp=sess.getWebApp();
  final WebAppCtrl wappc=(WebAppCtrl)wapp;
  final AuDecoder audec=getAuDecoder(wapp);
  final String dtid=audec.getDesktopId(request);
  if (dtid == null) {
    if (log.debugable()) {
      final String msg="String_Node_Str" + Servlets.getDetail(request);
      log.debug(msg);
    }
    response.sendError(467,"String_Node_Str");
    return;
  }
  Desktop desktop=getDesktop(sess,dtid);
  if (desktop == null) {
    final String cmdId=audec.getFirstCommand(request);
    if (!"String_Node_Str".equals(cmdId))     desktop=recoverDesktop(sess,request,response,wappc,dtid);
    if (desktop == null) {
      response.setIntHeader("String_Node_Str",response.SC_GONE);
      sessionTimeout(request,response,wapp,dtid);
      return;
    }
  }
  WebManager.setDesktop(request,desktop);
  final String sid=request.getHeader("String_Node_Str");
  if (sid != null)   response.setHeader("String_Node_Str",sid);
  final Configuration config=wapp.getConfiguration();
  final List<AuRequest> aureqs;
  boolean keepAlive=false;
  try {
    final boolean timerKeepAlive=config.isTimerKeepAlive();
    aureqs=audec.decode(request,desktop);
    for (    AuRequest aureq : aureqs) {
      final String cmdId=aureq.getCommand();
      keepAlive=!(!timerKeepAlive && Events.ON_TIMER.equals(cmdId)) && !"String_Node_Str".equals(cmdId);
      if (keepAlive)       break;
    }
  }
 catch (  Throwable ex) {
    log.warningBriefly(ex);
    responseError(request,response,Exceptions.getMessage(ex));
    return;
  }
  if (aureqs.isEmpty()) {
    final String errmsg="String_Node_Str";
    log.debug(errmsg);
    responseError(request,response,errmsg);
    return;
  }
  ((SessionCtrl)sess).notifyClientRequest(keepAlive);
  final DesktopCtrl desktopCtrl=(DesktopCtrl)desktop;
  final Execution exec=new ExecutionImpl(getServletContext(),request,response,desktop,null);
  if (sid != null)   ((ExecutionCtrl)exec).setRequestId(sid);
  final AuWriter out=AuWriters.newInstance();
  out.setCompress(_compress);
  out.open(request,response);
  try {
    wappc.getUiEngine().execUpdate(exec,aureqs,out);
  }
 catch (  RequestOutOfSequenceException ex) {
    log.warning(ex.getMessage());
    response.setHeader("String_Node_Str",sid);
    response.setIntHeader("String_Node_Str",AuResponse.SC_OUT_OF_SEQUENCE);
  }
  out.close(request,response);
}

Fixed version (ground truth):
/** 
 * Process asynchronous update requests from the client.
 * @since 3.0.0
 */
protected void process(Session sess,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
  final String errClient=request.getHeader("String_Node_Str");
  if (errClient != null)   if (log.debugable())   log.debug("String_Node_Str" + errClient + "String_Node_Str"+ Servlets.getDetail(request));
  final WebApp wapp=sess.getWebApp();
  final WebAppCtrl wappc=(WebAppCtrl)wapp;
  final AuDecoder audec=getAuDecoder(wapp);
  final String dtid=audec.getDesktopId(request);
  if (dtid == null) {
    if (log.debugable()) {
      final String msg="String_Node_Str" + Servlets.getDetail(request);
      log.debug(msg);
    }
    response.sendError(467,"String_Node_Str");
    return;
  }
  Desktop desktop=getDesktop(sess,dtid);
  if (desktop == null) {
    final String cmdId=audec.getFirstCommand(request);
    if (!"String_Node_Str".equals(cmdId))     desktop=recoverDesktop(sess,request,response,wappc,dtid);
    if (desktop == null) {
      response.setIntHeader("String_Node_Str",HttpServletResponse.SC_GONE);
      sessionTimeout(request,response,wapp,dtid);
      return;
    }
  }
  WebManager.setDesktop(request,desktop);
  final String sid=request.getHeader("String_Node_Str");
  if (sid != null)   response.setHeader("String_Node_Str",sid);
  final Configuration config=wapp.getConfiguration();
  final List<AuRequest> aureqs;
  boolean keepAlive=false;
  try {
    final boolean timerKeepAlive=config.isTimerKeepAlive();
    aureqs=audec.decode(request,desktop);
    for (    AuRequest aureq : aureqs) {
      final String cmdId=aureq.getCommand();
      keepAlive=!(!timerKeepAlive && Events.ON_TIMER.equals(cmdId)) && !"String_Node_Str".equals(cmdId);
      if (keepAlive)       break;
    }
  }
 catch (  Throwable ex) {
    log.warningBriefly(ex);
    responseError(request,response,Exceptions.getMessage(ex));
    return;
  }
  if (aureqs.isEmpty()) {
    final String errmsg="String_Node_Str";
    log.debug(errmsg);
    responseError(request,response,errmsg);
    return;
  }
  ((SessionCtrl)sess).notifyClientRequest(keepAlive);
  final DesktopCtrl desktopCtrl=(DesktopCtrl)desktop;
  final Execution exec=new ExecutionImpl(getServletContext(),request,response,desktop,null);
  if (sid != null)   ((ExecutionCtrl)exec).setRequestId(sid);
  final AuWriter out=AuWriters.newInstance();
  out.setCompress(_compress);
  out.open(request,response);
  try {
    wappc.getUiEngine().execUpdate(exec,aureqs,out);
  }
 catch (  RequestOutOfSequenceException ex) {
    log.warning(ex.getMessage());
    response.setHeader("String_Node_Str",sid);
    response.setIntHeader("String_Node_Str",AuResponse.SC_OUT_OF_SEQUENCE);
  }
  out.close(request,response);
}