Program: 85625
Project: 85625
Buggy source:
@Override protected void processMessage(Message m) throws Exception {
  for (  ListenerRegistration<PeerEventListener> registration : eventListeners) {
    if (registration.executor == Threading.SAME_THREAD) {
      m=registration.listener.onPreMessageReceived(this,m);
      if (m == null)       break;
    }
  }
  if (m == null)   return;
  if (currentFilteredBlock != null && !(m instanceof Transaction)) {
    endFilteredBlock(currentFilteredBlock);
    currentFilteredBlock=null;
  }
  if (m instanceof Ping) {
    if (((Ping)m).hasNonce())     sendMessage(new Pong(((Ping)m).getNonce()));
  }
 else   if (m instanceof Pong) {
    processPong((Pong)m);
  }
 else   if (m instanceof NotFoundMessage) {
    processNotFoundMessage((NotFoundMessage)m);
  }
 else   if (m instanceof InventoryMessage) {
    processInv((InventoryMessage)m);
  }
 else   if (m instanceof Block) {
    processBlock((Block)m);
  }
 else   if (m instanceof FilteredBlock) {
    startFilteredBlock((FilteredBlock)m);
  }
 else   if (m instanceof Transaction) {
    processTransaction((Transaction)m);
  }
 else   if (m instanceof GetDataMessage) {
    processGetData((GetDataMessage)m);
  }
 else   if (m instanceof AddressMessage) {
    processAddressMessage((AddressMessage)m);
  }
 else   if (m instanceof HeadersMessage) {
    processHeaders((HeadersMessage)m);
  }
 else   if (m instanceof AlertMessage) {
    processAlert((AlertMessage)m);
  }
 else   if (m instanceof VersionMessage) {
    processVersionMessage((VersionMessage)m);
  }
 else   if (m instanceof VersionAck) {
    if (vPeerVersionMessage == null) {
      throw new ProtocolException("String_Node_Str");
    }
    if (isAcked) {
      throw new ProtocolException("String_Node_Str");
    }
    isAcked=true;
    this.setTimeoutEnabled(false);
    for (    final ListenerRegistration<PeerEventListener> registration : eventListeners) {
      registration.executor.execute(new Runnable(){
        @Override public void run(){
          registration.listener.onPeerConnected(Peer.this,1);
        }
      }
);
    }
    final int version=vMinProtocolVersion;
    if (vPeerVersionMessage.clientVersion < version) {
      log.warn("String_Node_Str",vPeerVersionMessage.clientVersion,version);
      close();
    }
  }
 else   if (m instanceof UTXOsMessage) {
    if (getutxoFutures != null) {
      SettableFuture<UTXOsMessage> future=getutxoFutures.pollFirst();
      if (future != null)       future.set((UTXOsMessage)m);
    }
  }
 else   if (m instanceof RejectMessage) {
    log.error("String_Node_Str",this,getPeerVersionMessage().subVer,m);
  }
 else {
    log.warn("String_Node_Str",this,m);
  }
}

Fixed version (ground truth):
@Override protected void processMessage(Message m) throws Exception {
  for (  ListenerRegistration<PeerEventListener> registration : eventListeners) {
    if (registration.executor == Threading.SAME_THREAD) {
      m=registration.listener.onPreMessageReceived(this,m);
      if (m == null)       break;
    }
  }
  if (m == null)   return;
  if (currentFilteredBlock != null && !(m instanceof Transaction)) {
    endFilteredBlock(currentFilteredBlock);
    currentFilteredBlock=null;
  }
  if (m instanceof Ping) {
    if (((Ping)m).hasNonce())     sendMessage(new Pong(((Ping)m).getNonce()));
  }
 else   if (m instanceof Pong) {
    processPong((Pong)m);
  }
 else   if (m instanceof NotFoundMessage) {
    processNotFoundMessage((NotFoundMessage)m);
  }
 else   if (m instanceof InventoryMessage) {
    processInv((InventoryMessage)m);
  }
 else   if (m instanceof Block) {
    processBlock((Block)m);
  }
 else   if (m instanceof FilteredBlock) {
    startFilteredBlock((FilteredBlock)m);
  }
 else   if (m instanceof Transaction) {
    processTransaction((Transaction)m);
  }
 else   if (m instanceof GetDataMessage) {
    processGetData((GetDataMessage)m);
  }
 else   if (m instanceof AddressMessage) {
    processAddressMessage((AddressMessage)m);
  }
 else   if (m instanceof HeadersMessage) {
    processHeaders((HeadersMessage)m);
  }
 else   if (m instanceof AlertMessage) {
    processAlert((AlertMessage)m);
  }
 else   if (m instanceof VersionMessage) {
    processVersionMessage((VersionMessage)m);
  }
 else   if (m instanceof VersionAck) {
    if (vPeerVersionMessage == null) {
      throw new ProtocolException("String_Node_Str");
    }
    if (isAcked) {
      throw new ProtocolException("String_Node_Str");
    }
    isAcked=true;
    this.setTimeoutEnabled(false);
    for (    final ListenerRegistration<PeerEventListener> registration : eventListeners) {
      registration.executor.execute(new Runnable(){
        @Override public void run(){
          registration.listener.onPeerConnected(Peer.this,1);
        }
      }
);
    }
    final int version=vMinProtocolVersion;
    if (vPeerVersionMessage.clientVersion < version) {
      log.warn("String_Node_Str",vPeerVersionMessage.clientVersion,version);
      close();
    }
  }
 else   if (m instanceof UTXOsMessage) {
    processUTXOMessage((UTXOsMessage)m);
  }
 else   if (m instanceof RejectMessage) {
    log.error("String_Node_Str",this,getPeerVersionMessage().subVer,m);
  }
 else {
    log.warn("String_Node_Str",this,m);
  }
}