Program: 156217
Project: 156217
Buggy source:
private Position decodeAlternative(Channel channel,String sentence){
  Matcher parser=pattern.matcher(sentence);
  if (!parser.matches()) {
    return null;
  }
  Position position=new Position();
  ExtendedInfoFormatter extendedInfo=new ExtendedInfoFormatter("String_Node_Str");
  Integer index=1;
  String imei=parser.group(index++);
  try {
    position.setDeviceId(getDataManager().getDeviceByImei(imei).getId());
  }
 catch (  Exception error) {
    Log.warning("String_Node_Str" + imei);
    return null;
  }
  position.setValid(parser.group(index++).compareTo("String_Node_Str") != 0 ? true : false);
  Calendar time=Calendar.getInstance(TimeZone.getTimeZone("String_Node_Str"));
  time.clear();
  time.set(Calendar.DAY_OF_MONTH,Integer.valueOf(parser.group(index++)));
  time.set(Calendar.MONTH,Integer.valueOf(parser.group(index++)) - 1);
  time.set(Calendar.YEAR,2000 + Integer.valueOf(parser.group(index++)));
  time.set(Calendar.HOUR,Integer.valueOf(parser.group(index++)));
  time.set(Calendar.MINUTE,Integer.valueOf(parser.group(index++)));
  time.set(Calendar.SECOND,Integer.valueOf(parser.group(index++)));
  position.setTime(time.getTime());
  String hemisphere=parser.group(index++);
  Double longitude=Double.valueOf(parser.group(index++));
  longitude+=Double.valueOf(parser.group(index++)) / 60;
  if (hemisphere.compareTo("String_Node_Str") == 0)   longitude=-longitude;
  position.setLongitude(longitude);
  hemisphere=parser.group(index++);
  Double latitude=Double.valueOf(parser.group(index++));
  latitude+=Double.valueOf(parser.group(index++)) / 60;
  if (hemisphere.compareTo("String_Node_Str") == 0)   latitude=-latitude;
  position.setLatitude(latitude);
  position.setAltitude(Double.valueOf(parser.group(index++)));
  position.setSpeed(Double.valueOf(parser.group(index++)));
  position.setCourse(Double.valueOf(parser.group(index++)));
  extendedInfo.set("String_Node_Str",Integer.valueOf(parser.group(index++)));
  extendedInfo.set("String_Node_Str",parser.group(index++));
  position.setExtendedInfo(extendedInfo.toString());
  return position;
}

Fixed version (ground truth):
private Position decodeAlternative(Channel channel,String sentence){
  Matcher parser=pattern.matcher(sentence);
  if (!parser.matches()) {
    return null;
  }
  Position position=new Position();
  ExtendedInfoFormatter extendedInfo=new ExtendedInfoFormatter("String_Node_Str");
  Integer index=1;
  String imei=parser.group(index++);
  try {
    position.setDeviceId(getDataManager().getDeviceByImei(imei).getId());
  }
 catch (  Exception error) {
    Log.warning("String_Node_Str" + imei);
    return null;
  }
  position.setValid(parser.group(index++).compareTo("String_Node_Str") != 0);
  Calendar time=Calendar.getInstance(TimeZone.getTimeZone("String_Node_Str"));
  time.clear();
  time.set(Calendar.DAY_OF_MONTH,Integer.valueOf(parser.group(index++)));
  time.set(Calendar.MONTH,Integer.valueOf(parser.group(index++)) - 1);
  time.set(Calendar.YEAR,2000 + Integer.valueOf(parser.group(index++)));
  time.set(Calendar.HOUR,Integer.valueOf(parser.group(index++)));
  time.set(Calendar.MINUTE,Integer.valueOf(parser.group(index++)));
  time.set(Calendar.SECOND,Integer.valueOf(parser.group(index++)));
  position.setTime(time.getTime());
  String hemisphere=parser.group(index++);
  Double longitude=Double.valueOf(parser.group(index++));
  longitude+=Double.valueOf(parser.group(index++)) / 60;
  if (hemisphere.compareTo("String_Node_Str") == 0)   longitude=-longitude;
  position.setLongitude(longitude);
  hemisphere=parser.group(index++);
  Double latitude=Double.valueOf(parser.group(index++));
  latitude+=Double.valueOf(parser.group(index++)) / 60;
  if (hemisphere.compareTo("String_Node_Str") == 0)   latitude=-latitude;
  position.setLatitude(latitude);
  position.setAltitude(Double.valueOf(parser.group(index++)));
  position.setSpeed(Double.valueOf(parser.group(index++)));
  position.setCourse(Double.valueOf(parser.group(index++)));
  extendedInfo.set("String_Node_Str",Integer.valueOf(parser.group(index++)));
  extendedInfo.set("String_Node_Str",parser.group(index++));
  position.setExtendedInfo(extendedInfo.toString());
  return position;
}