Program: 9091
Project: 9091
Buggy source:
public AbstractProtocolDataUnit decode(byte[] pduData){
  int destination=(pduData[0] >> 2) & 0x3f;
  int source=pduData[1] & 0x3f;
  int pduType=((pduData[0] & 0x03) << 2) | ((pduData[1] & 0xc0) >> 6);
switch (pduType) {
case PduConstants.PDU_CONNECT:
    return new Connect(destination,source,decodeParameter(pduData,2));
case PduConstants.PDU_CONNECT_COMPLETE:
  return new ConnectComplete(destination,source,decodeParameter(pduData,2));
case PduConstants.PDU_DISCONNECT:
return new Disconnect(destination,source);
case PduConstants.PDU_DISCONNECTED_MODE:
int reason=pduData[2];
return new DisconnectedMode(destination,source,reason);
case PduConstants.PDU_INFORMATION:
int received=pduData[2] & 0x0f;
int send=pduData[2] >>> 4;
byte[] informationData=new byte[pduData.length - 3];
System.arraycopy(pduData,3,informationData,0,informationData.length);
return new Information(destination,source,received,send,informationData);
case PduConstants.PDU_PARAMETER_EXCHANGE:
return new ParameterExchange(destination,source,decodeParameter(pduData,2));
case PduConstants.PDU_RECEIVE_READY:
int receivedReady=pduData[2] & 0x0f;
return new ReceiveReady(destination,source,receivedReady);
case PduConstants.PDU_SYMMETRY:
return new Symmetry();
case PduConstants.PDU_UNNUMBERED_INFORMATION:
byte[] unnumberedData=new byte[pduData.length - 2];
System.arraycopy(pduData,2,unnumberedData,0,unnumberedData.length);
return new UnnumberedInformation(destination,source,unnumberedData);
case PduConstants.PDU_RECEIVE_NOT_READY:
case PduConstants.PDU_AGGREGATED_FRAME:
case PduConstants.PDU_FRAME_REJECT:
throw new UnsupportedOperationException("String_Node_Str" + pduType);
default :
throw new RuntimeException("String_Node_Str" + pduType);
}
}

Fixed version (ground truth):
public AbstractProtocolDataUnit decode(byte[] pduData){
  int destination=(pduData[0] >> 2) & 0x3f;
  int source=pduData[1] & 0x3f;
  int pduType=((pduData[0] & 0x03) << 2) | ((pduData[1] & 0xc0) >> 6);
switch (pduType) {
case PduConstants.PDU_CONNECT:
    return new Connect(destination,source,decodeParameter(pduData,2));
case PduConstants.PDU_CONNECT_COMPLETE:
  return new ConnectComplete(destination,source,decodeParameter(pduData,2));
case PduConstants.PDU_DISCONNECT:
return new Disconnect(destination,source);
case PduConstants.PDU_DISCONNECTED_MODE:
int reason=pduData[2];
return new DisconnectedMode(destination,source,reason);
case PduConstants.PDU_INFORMATION:
int received=pduData[2] & 0x0f;
int send=(pduData[2] >>> 4) & 0x0f;
byte[] informationData=new byte[pduData.length - 3];
System.arraycopy(pduData,3,informationData,0,informationData.length);
return new Information(destination,source,received,send,informationData);
case PduConstants.PDU_PARAMETER_EXCHANGE:
return new ParameterExchange(destination,source,decodeParameter(pduData,2));
case PduConstants.PDU_RECEIVE_READY:
int receivedReady=pduData[2] & 0x0f;
return new ReceiveReady(destination,source,receivedReady);
case PduConstants.PDU_SYMMETRY:
return new Symmetry();
case PduConstants.PDU_UNNUMBERED_INFORMATION:
byte[] unnumberedData=new byte[pduData.length - 2];
System.arraycopy(pduData,2,unnumberedData,0,unnumberedData.length);
return new UnnumberedInformation(destination,source,unnumberedData);
case PduConstants.PDU_RECEIVE_NOT_READY:
case PduConstants.PDU_AGGREGATED_FRAME:
case PduConstants.PDU_FRAME_REJECT:
throw new UnsupportedOperationException("String_Node_Str" + pduType);
default :
throw new RuntimeException("String_Node_Str" + pduType);
}
}