Program: 156059
Project: 156059
Buggy source:
@Override protected Object decode(Channel channel,SocketAddress remoteAddress,Object msg) throws Exception {
  String xml=(String)msg;
  String id=getAttribute(xml,"String_Node_Str");
  String data=getAttribute(xml,"String_Node_Str");
  if (id != null && data != null) {
    if (!identify(id,channel,remoteAddress)) {
      return null;
    }
    Parser parser=new Parser(PATTERN,data);
    if (!parser.matches()) {
      return null;
    }
    Position position=new Position();
    position.setProtocol(getProtocolName());
    position.setDeviceId(getDeviceId());
    position.set(Event.KEY_STATUS,parser.nextInt());
    position.setValid(parser.next().equals("String_Node_Str"));
    DateBuilder dateBuilder=new DateBuilder().setDateReverse(parser.nextInt(),parser.nextInt(),parser.nextInt()).setTime(parser.nextInt(),parser.nextInt(),parser.nextInt());
    position.setTime(dateBuilder.getDate());
    position.setLatitude(parser.nextCoordinate());
    position.setLongitude(parser.nextCoordinate());
    position.setSpeed(UnitsConverter.knotsFromKph(parser.nextDouble()));
    position.setCourse(parser.nextDouble());
    position.set(Event.KEY_INPUT,parser.nextInt(2));
    position.set(Event.KEY_POWER,parser.nextDouble() / 10);
    position.set(Event.PREFIX_TEMP + 1,parser.nextInt());
    position.set(Event.KEY_FUEL,parser.nextInt());
    position.set(Event.PREFIX_ADC + 1,parser.nextInt());
    position.set(Event.PREFIX_ADC + 2,parser.nextInt());
    position.set(Event.KEY_OUTPUT,parser.nextInt(2));
    position.set(Event.KEY_ODOMETER,parser.nextInt());
    position.set("String_Node_Str",parser.nextInt());
    return position;
  }
  return null;
}

Fixed version (ground truth):
@Override protected Object decode(Channel channel,SocketAddress remoteAddress,Object msg) throws Exception {
  String xml=(String)msg;
  String id=getAttribute(xml,"String_Node_Str");
  String data=getAttribute(xml,"String_Node_Str");
  if (id != null && data != null) {
    if (!identify(id,channel,remoteAddress)) {
      return null;
    }
    Parser parser=new Parser(PATTERN,data);
    if (!parser.matches()) {
      return null;
    }
    Position position=new Position();
    position.setProtocol(getProtocolName());
    position.setDeviceId(getDeviceId());
    position.set(Event.KEY_STATUS,parser.nextInt());
    position.setValid(parser.next().equals("String_Node_Str"));
    DateBuilder dateBuilder=new DateBuilder().setDateReverse(parser.nextInt(),parser.nextInt(),parser.nextInt()).setTime(parser.nextInt(),parser.nextInt(),parser.nextInt());
    position.setTime(dateBuilder.getDate());
    position.setLatitude(parser.nextCoordinate());
    position.setLongitude(parser.nextCoordinate());
    position.setSpeed(UnitsConverter.knotsFromKph(parser.nextDouble()));
    position.setCourse(parser.nextDouble());
    position.set(Event.KEY_INPUT,parser.nextInt(2));
    position.set(Event.KEY_POWER,parser.nextDouble() / 10);
    position.set(Event.PREFIX_TEMP + 1,parser.nextInt());
    position.set(Event.KEY_RPM,parser.nextInt());
    position.set(Event.KEY_FUEL,parser.nextInt());
    position.set(Event.PREFIX_ADC + 1,parser.nextInt());
    position.set(Event.PREFIX_ADC + 2,parser.nextInt());
    position.set(Event.KEY_OUTPUT,parser.nextInt(2));
    position.set(Event.KEY_ODOMETER,parser.nextInt());
    position.set("String_Node_Str",parser.next());
    return position;
  }
  return null;
}