Program: 87
Project: 87
Buggy source:
@SuppressWarnings({"String_Node_Str"}) @Override protected void onHttpHeadersParsed(HttpHeader httpHeader,FilterChainContext ctx){
  super.onHttpHeadersParsed(httpHeader,ctx);
  if (LOGGER.isDebugEnabled()) {
    LOGGER.debug("String_Node_Str" + httpHeader.toString());
  }
  if (httpHeader.containsHeader(Header.Connection)) {
    if ("String_Node_Str".equals(httpHeader.getHeader(Header.Connection))) {
      ConnectionManager.markConnectionAsDoNotCache(ctx.getConnection());
    }
  }
  if (httpHeader.isSkipRemainder()) {
    return;
  }
  final HttpTransactionContext context=provider.getHttpTransactionContext(ctx.getConnection());
  final AsyncHandler handler=context.handler;
  final List<ResponseFilter> filters=context.provider.clientConfig.getResponseFilters();
  if (!filters.isEmpty()) {
    FilterContext fc=new FilterContext.FilterContextBuilder().asyncHandler(handler).request(context.request).responseStatus(context.responseStatus).build();
    try {
      for (      final ResponseFilter f : filters) {
        fc=f.filter(fc);
      }
    }
 catch (    Exception e) {
      context.abort(e);
    }
    if (fc.replayRequest()) {
      httpHeader.setSkipRemainder(true);
      final Request newRequest=fc.getRequest();
      final AsyncHandler newHandler=fc.getAsyncHandler();
      try {
        final ConnectionManager m=context.provider.connectionManager;
        final Connection c=m.obtainConnection(newRequest,context.future);
        final HttpTransactionContext newContext=context.copy();
        context.future=null;
        provider.setHttpTransactionContext(c,newContext);
        try {
          context.provider.execute(c,newRequest,newHandler,context.future);
        }
 catch (        IOException ioe) {
          newContext.abort(ioe);
        }
      }
 catch (      Exception e) {
        context.abort(e);
      }
      return;
    }
  }
  if (context.statusHandler != null && context.invocationStatus == StatusHandler.InvocationStatus.CONTINUE) {
    final boolean result=context.statusHandler.handleStatus(((HttpResponsePacket)httpHeader),context,ctx);
    if (!result) {
      httpHeader.setSkipRemainder(true);
      return;
    }
  }
  if (context.currentState != AsyncHandler.STATE.ABORT) {
    boolean upgrade=context.currentState == AsyncHandler.STATE.UPGRADE;
    try {
      context.currentState=handler.onHeadersReceived(new GrizzlyResponseHeaders((HttpResponsePacket)httpHeader,null,provider));
    }
 catch (    Exception e) {
      httpHeader.setSkipRemainder(true);
      context.abort(e);
      return;
    }
    if (upgrade) {
      try {
        context.protocolHandler.setConnection(ctx.getConnection());
        DefaultWebSocket ws=new DefaultWebSocket(context.protocolHandler);
        ws.onConnect();
        context.webSocket=new GrizzlyWebSocketAdapter(ws);
        WebSocketEngine.getEngine().setWebSocketHolder(ctx.getConnection(),context.protocolHandler,ws);
        ((WebSocketUpgradeHandler)context.handler).onSuccess(context.webSocket);
        context.result(handler.onCompleted());
      }
 catch (      Exception e) {
        httpHeader.setSkipRemainder(true);
        context.abort(e);
      }
    }
  }
}

Fixed version (ground truth):
@SuppressWarnings({"String_Node_Str"}) @Override protected void onHttpHeadersParsed(HttpHeader httpHeader,FilterChainContext ctx){
  super.onHttpHeadersParsed(httpHeader,ctx);
  if (LOGGER.isDebugEnabled()) {
    LOGGER.debug("String_Node_Str" + httpHeader.toString());
  }
  if (httpHeader.containsHeader(Header.Connection)) {
    if ("String_Node_Str".equals(httpHeader.getHeader(Header.Connection))) {
      ConnectionManager.markConnectionAsDoNotCache(ctx.getConnection());
    }
  }
  if (httpHeader.isSkipRemainder()) {
    return;
  }
  final HttpTransactionContext context=provider.getHttpTransactionContext(ctx.getConnection());
  final AsyncHandler handler=context.handler;
  final List<ResponseFilter> filters=context.provider.clientConfig.getResponseFilters();
  if (!filters.isEmpty()) {
    FilterContext fc=new FilterContext.FilterContextBuilder().asyncHandler(handler).request(context.request).responseStatus(context.responseStatus).build();
    try {
      for (      final ResponseFilter f : filters) {
        fc=f.filter(fc);
      }
    }
 catch (    Exception e) {
      context.abort(e);
    }
    if (fc.replayRequest()) {
      httpHeader.setSkipRemainder(true);
      final Request newRequest=fc.getRequest();
      final AsyncHandler newHandler=fc.getAsyncHandler();
      try {
        final ConnectionManager m=context.provider.connectionManager;
        final Connection c=m.obtainConnection(newRequest,context.future);
        final HttpTransactionContext newContext=context.copy();
        context.future=null;
        provider.setHttpTransactionContext(c,newContext);
        try {
          context.provider.execute(c,newRequest,newHandler,context.future);
        }
 catch (        IOException ioe) {
          newContext.abort(ioe);
        }
      }
 catch (      Exception e) {
        context.abort(e);
      }
      return;
    }
  }
  if (context.statusHandler != null && context.invocationStatus == StatusHandler.InvocationStatus.CONTINUE) {
    final boolean result=context.statusHandler.handleStatus(((HttpResponsePacket)httpHeader),context,ctx);
    if (!result) {
      httpHeader.setSkipRemainder(true);
      return;
    }
  }
  if (context.currentState != AsyncHandler.STATE.ABORT) {
    boolean upgrade=context.currentState == AsyncHandler.STATE.UPGRADE;
    try {
      context.currentState=handler.onHeadersReceived(new GrizzlyResponseHeaders((HttpResponsePacket)httpHeader,null,provider));
    }
 catch (    Exception e) {
      httpHeader.setSkipRemainder(true);
      context.abort(e);
      return;
    }
    if (upgrade) {
      try {
        context.protocolHandler.setConnection(ctx.getConnection());
        DefaultWebSocket ws=new DefaultWebSocket(context.protocolHandler);
        ws.onConnect();
        context.webSocket=new GrizzlyWebSocketAdapter(ws);
        WebSocketEngine.getEngine().setWebSocketHolder(ctx.getConnection(),context.protocolHandler,ws);
        ((WebSocketUpgradeHandler)context.handler).onSuccess(context.webSocket);
        final int wsTimeout=context.provider.clientConfig.getWebSocketTimeoutInMs();
        IdleTimeoutFilter.setCustomTimeout(ctx.getConnection(),((wsTimeout <= 0) ? IdleTimeoutFilter.FOREVER : wsTimeout),TimeUnit.MILLISECONDS);
        context.result(handler.onCompleted());
      }
 catch (      Exception e) {
        httpHeader.setSkipRemainder(true);
        context.abort(e);
      }
    }
  }
}