Program: 34772
Project: 34772
Buggy source:
public void sendRequestToWc(FrameHeaders frame){
  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
    Tr.entry(tc,"String_Node_Str");
  }
  if (null == frame) {
    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
      Tr.debug(tc,"String_Node_Str");
    }
  }
 else {
    WsByteBufferPoolManager bufManager=HttpDispatcher.getBufferManager();
    WsByteBuffer buf=bufManager.allocate(frame.buildFrameForWrite().length);
    byte[] ba=frame.buildFrameForWrite();
    buf.put(ba);
    buf.flip();
    TCPReadRequestContext readi=h2HttpInboundLinkWrap.getConnectionContext().getReadInterface();
    readi.setBuffer(buf);
    currentFrame=frame;
    getHeadersFromFrame();
    setHeadersComplete();
    try {
      processCompleteHeaders(true);
    }
 catch (    CompressionException ce) {
      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
        Tr.debug(tc,"String_Node_Str" + ce);
      }
      buf.release();
      currentFrame=new FrameRstStream(myID,Constants.CANCEL,false);
      try {
        processNextFrame(currentFrame,Constants.Direction.WRITING_OUT);
      }
 catch (      ProtocolException pe) {
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
          Tr.debug(tc,"String_Node_Str" + pe);
        }
      }
      currentFrame=null;
      muxLink.triggerStreamClose(this);
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
        Tr.exit(tc,"String_Node_Str" + myID);
      }
      return;
    }
    setReadyForRead();
  }
  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
    Tr.exit(tc,"String_Node_Str");
  }
}

Fixed version (ground truth):
/** 
 * Send an artificially created H2 request from a push_promise up to the WebContainer
 */
public void sendRequestToWc(FrameHeaders frame){
  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
    Tr.entry(tc,"String_Node_Str");
  }
  if (null == frame) {
    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
      Tr.debug(tc,"String_Node_Str");
    }
  }
 else {
    WsByteBufferPoolManager bufManager=HttpDispatcher.getBufferManager();
    WsByteBuffer buf=bufManager.allocate(frame.buildFrameForWrite().length);
    byte[] ba=frame.buildFrameForWrite();
    buf.put(ba);
    buf.flip();
    TCPReadRequestContext readi=h2HttpInboundLinkWrap.getConnectionContext().getReadInterface();
    readi.setBuffer(buf);
    currentFrame=frame;
    getHeadersFromFrame();
    setHeadersComplete();
    try {
      processCompleteHeaders(true);
    }
 catch (    CompressionException ce) {
      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
        Tr.debug(tc,"String_Node_Str" + ce);
      }
      buf.release();
      currentFrame=new FrameRstStream(myID,Constants.CANCEL,false);
      try {
        processNextFrame(currentFrame,Constants.Direction.WRITING_OUT);
      }
 catch (      ProtocolException pe) {
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
          Tr.debug(tc,"String_Node_Str" + pe);
        }
      }
      currentFrame=null;
      muxLink.triggerStreamClose(this);
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
        Tr.exit(tc,"String_Node_Str" + myID);
      }
      return;
    }
    setReadyForRead();
  }
  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
    Tr.exit(tc,"String_Node_Str");
  }
}