Program: 40827
Project: 40827
Buggy source:
/** 
 * @param squitter extended squitter which contains this velocity over ground msg
 * @throws BadFormatException if message has wrong format
 */
public VelocityOverGroundMsg(ExtendedSquitter squitter) throws BadFormatException {
  super(squitter);
  setType(subtype.ADSB_VELOCITY);
  if (this.getFormatTypeCode() != 19) {
    throw new BadFormatException("String_Node_Str");
  }
  byte[] msg=this.getMessage();
  msg_subtype=(byte)(msg[0] & 0x7);
  if (msg_subtype != 1 && msg_subtype != 2) {
    throw new BadFormatException("String_Node_Str");
  }
  intent_change=(msg[1] & 0x80) > 0;
  ifr_capability=(msg[1] & 0x40) > 0;
  navigation_accuracy_category=(byte)((msg[1] >>> 3) & 0x7);
  velocity_info_available=true;
  vertical_rate_info_available=true;
  geo_minus_baro_available=true;
  direction_west=(msg[1] & 0x4) > 0;
  east_west_velocity=(short)(((msg[1] & 0x3) << 8 | msg[2] & 0xFF) - 1);
  if (east_west_velocity == -1)   velocity_info_available=false;
  if (msg_subtype == 2)   east_west_velocity<<=2;
  direction_south=(msg[3] & 0x80) > 0;
  north_south_velocity=(short)(((msg[3] & 0x7F) << 3 | msg[4] >>> 5 & 0x07) - 1);
  if (north_south_velocity == -1)   velocity_info_available=false;
  if (msg_subtype == 2)   north_south_velocity<<=2;
  vertical_source=(msg[4] & 0x10) > 0;
  vertical_rate_down=(msg[4] & 0x08) > 0;
  vertical_rate=(short)((((msg[4] & 0x07) << 6 | msg[5] >>> 2 & 0x3F) - 1) << 6);
  if (vertical_rate == -1)   vertical_rate_info_available=false;
  geo_minus_baro=(short)(((msg[6] & 0x7F) - 1) * 25);
  if (geo_minus_baro == -1)   geo_minus_baro_available=false;
  if ((msg[6] & 0x80) > 0)   geo_minus_baro*=-1;
}

Fixed version (ground truth):
/** 
 * @param squitter extended squitter which contains this velocity over ground msg
 * @throws BadFormatException if message has wrong format
 */
public VelocityOverGroundMsg(ExtendedSquitter squitter) throws BadFormatException {
  super(squitter);
  setType(subtype.ADSB_VELOCITY);
  if (this.getFormatTypeCode() != 19) {
    throw new BadFormatException("String_Node_Str");
  }
  byte[] msg=this.getMessage();
  msg_subtype=(byte)(msg[0] & 0x7);
  if (msg_subtype != 1 && msg_subtype != 2) {
    throw new BadFormatException("String_Node_Str");
  }
  intent_change=(msg[1] & 0x80) > 0;
  ifr_capability=(msg[1] & 0x40) > 0;
  navigation_accuracy_category=(byte)((msg[1] >>> 3) & 0x7);
  velocity_info_available=true;
  vertical_rate_info_available=true;
  geo_minus_baro_available=true;
  direction_west=(msg[1] & 0x4) > 0;
  east_west_velocity=(short)(((msg[1] & 0x3) << 8 | msg[2] & 0xFF) - 1);
  if (east_west_velocity == -1)   velocity_info_available=false;
  if (msg_subtype == 2)   east_west_velocity<<=2;
  direction_south=(msg[3] & 0x80) > 0;
  north_south_velocity=(short)(((msg[3] & 0x7F) << 3 | msg[4] >>> 5 & 0x07) - 1);
  if (north_south_velocity == -1)   velocity_info_available=false;
  if (msg_subtype == 2)   north_south_velocity<<=2;
  vertical_source=(msg[4] & 0x10) > 0;
  vertical_rate_down=(msg[4] & 0x08) > 0;
  vertical_rate=(short)((((msg[4] & 0x07) << 6 | msg[5] >>> 2 & 0x3F) - 1) << 6);
  if (vertical_rate == -1)   vertical_rate_info_available=false;
  geo_minus_baro=msg[6] & 0x7F;
  if (geo_minus_baro == 0)   geo_minus_baro_available=false;
 else   geo_minus_baro=(geo_minus_baro - 1) * 25;
  if ((msg[6] & 0x80) > 0)   geo_minus_baro*=-1;
}