Program: 29709
Project: 29709
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");
  try {
    dataHeader=dataHeaderParser.parse(sinStream).mapTo(DataHeader.class);
  }
 catch (  Exception e) {
    dataHeader=new DataHeader();
    dataHeader.mmcfMagic=new String("String_Node_Str").getBytes();
    dataHeader.gptpLen=0;
    dataHeader.mmcfLen=0;
  }
  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();
}

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");
  try {
    byte[] mmcfmagic=new byte[4];
    sinStream.read(mmcfmagic);
    if (!new String(mmcfmagic).equals("String_Node_Str"))     throw new Exception("String_Node_Str");
    sinStream.skip(-4);
    dataHeader=dataHeaderParser.parse(sinStream).mapTo(DataHeader.class);
  }
 catch (  Exception e) {
    dataHeader=new DataHeader();
    dataHeader.mmcfMagic=new String("String_Node_Str").getBytes();
    dataHeader.gptpLen=0;
    dataHeader.mmcfLen=0;
  }
  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();
}