Program: 29711
Project: 29711
Buggy source:
public void parseDataHeader(JBBPBitInputStream sinStream) throws IOException {
  JBBPParser dataHeaderParser=JBBPParser.prepare("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
  JBBPParser addrBlocksParser=JBBPParser.prepare("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
  JBBPParser LZ4ABlocksParser=JBBPParser.prepare("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
  dheader=sinStream.readByteArray(blocks.blocks[0].length);
  JBBPBitInputStream dheaderStream=new JBBPBitInputStream(new ByteArrayInputStream(dheader));
  if (new String(dheaderStream.readByteArray(4)).equals("String_Node_Str")) {
    dheaderStream.reset();
    dataHeader=dataHeaderParser.parse(dheaderStream).mapTo(DataHeader.class);
    dataHeader.addrList=dheaderStream.readByteArray(dataHeader.mmcfLen - dataHeader.gptpLen);
    JBBPBitInputStream addrListStream=new JBBPBitInputStream(new ByteArrayInputStream(dataHeader.addrList));
    byte[] amagic=new byte[4];
    dataBlocks=new Vector<Object>();
    while (addrListStream.hasAvailableData()) {
      addrListStream.read(amagic);
      if (new String(amagic).equals("String_Node_Str")) {
        AddrBlock addrBlock=addrBlocksParser.parse(addrListStream).mapTo(AddrBlock.class);
        dataBlocks.add(addrBlock);
      }
      if (new String(amagic).equals("String_Node_Str")) {
        LZ4ABlock lz4aBlock=LZ4ABlocksParser.parse(addrListStream).mapTo(LZ4ABlock.class);
        dataBlocks.add(lz4aBlock);
      }
    }
  }
 else {
    dataHeader=new DataHeader();
    dataHeader.gptpLen=0;
    dataHeader.mmcfLen=0;
  }
  dataType=getDataTypePriv();
  dataSize=getDataSizePriv();
}

Fixed version (ground truth):
public void parseDataHeader(JBBPBitInputStream sinStream) throws IOException {
  JBBPParser dataHeaderParser=JBBPParser.prepare("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
  JBBPParser addrBlocksParser=JBBPParser.prepare("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
  JBBPParser LZ4ABlocksParser=JBBPParser.prepare("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
  dataHeader=dataHeaderParser.parse(sinStream).mapTo(DataHeader.class);
  if (new String(dataHeader.mmcfMagic).equals("String_Node_Str")) {
    long addrLength=dataHeader.mmcfLen - dataHeader.gptpLen;
    long read=0;
    byte[] amagic=new byte[4];
    dataBlocks=new Vector<Object>();
    while (read < addrLength) {
      sinStream.read(amagic);
      read+=4;
      if (new String(amagic).equals("String_Node_Str")) {
        AddrBlock addrBlock=addrBlocksParser.parse(sinStream).mapTo(AddrBlock.class);
        dataBlocks.add(addrBlock);
        read+=(addrBlock.blockLen - 4);
      }
      if (new String(amagic).equals("String_Node_Str")) {
        LZ4ABlock lz4aBlock=LZ4ABlocksParser.parse(sinStream).mapTo(LZ4ABlock.class);
        dataBlocks.add(lz4aBlock);
        read+=(lz4aBlock.blockLen - 4);
      }
    }
  }
 else {
    dataHeader=new DataHeader();
    dataHeader.gptpLen=0;
    dataHeader.mmcfLen=0;
  }
  dataType=getDataTypePriv();
  dataSize=getDataSizePriv();
}