Program: 62643
Project: 62643
Buggy source:
public M_Message(String raw){
  super(raw);
  hasConfiguration=false;
  String[] tokens=this.getPayload().split(Message.DELIMETER);
  if (tokens.length > 1)   try {
    byte[] bytes=Base64.decodeBase64(tokens[2].getBytes());
    hasConfiguration=true;
    logger.trace("String_Node_Str");
    logger.trace("String_Node_Str",(int)bytes[0]);
    logger.trace("String_Node_Str",(int)bytes[1]);
    logger.trace("String_Node_Str",(int)bytes[2]);
    rooms=new ArrayList<RoomInformation>();
    devices=new ArrayList<DeviceInformation>();
    int roomCount=bytes[2];
    int byteOffset=3;
    for (int i=0; i < roomCount; i++) {
      int position=bytes[byteOffset++];
      String name="String_Node_Str";
      int nameLength=(int)bytes[byteOffset++] & 0xff;
      for (int char_idx=0; char_idx < nameLength; char_idx++) {
        name+=(char)bytes[byteOffset++];
      }
      String rfAddress=Utils.toHex(((int)bytes[byteOffset] & 0xff),((int)bytes[byteOffset + 1] & 0xff),((int)bytes[byteOffset + 2] & 0xff));
      byteOffset+=3;
      rooms.add(new RoomInformation(position,name,rfAddress));
    }
    int deviceCount=bytes[byteOffset++];
    for (int deviceId=0; deviceId < deviceCount; deviceId++) {
      DeviceType deviceType=DeviceType.create(bytes[byteOffset++]);
      String rfAddress=Utils.toHex(((int)bytes[byteOffset] & 0xff),((int)bytes[byteOffset + 1] & 0xff),((int)bytes[byteOffset + 2] & 0xff));
      byteOffset+=3;
      String serialNumber="String_Node_Str";
      for (int i=0; i < 10; i++) {
        serialNumber+=(char)bytes[byteOffset++];
      }
      int nameLength=(int)bytes[byteOffset++] & 0xff;
      String deviceName="String_Node_Str";
      for (int char_idx=0; char_idx < nameLength; char_idx++) {
        deviceName+=(char)bytes[byteOffset++];
      }
      int roomId=(int)bytes[byteOffset++] & 0xff;
      devices.add(new DeviceInformation(deviceType,serialNumber,rfAddress,deviceName,roomId));
    }
  }
 catch (  Exception e) {
    logger.info("String_Node_Str");
    logger.info(e.getMessage());
    logger.debug(Utils.getStackTrace(e));
    logger.debug("String_Node_Str",this.getPayload());
  }
 else {
    logger.info("String_Node_Str");
    hasConfiguration=false;
  }
}

Fixed version (ground truth):
public M_Message(String raw){
  super(raw);
  hasConfiguration=false;
  String[] tokens=this.getPayload().split(Message.DELIMETER);
  if (tokens.length > 1)   try {
    byte[] bytes=Base64.decodeBase64(tokens[2].getBytes());
    hasConfiguration=true;
    logger.trace("String_Node_Str");
    logger.trace("String_Node_Str",(int)bytes[0]);
    logger.trace("String_Node_Str",(int)bytes[1]);
    logger.trace("String_Node_Str",(int)bytes[2]);
    rooms=new ArrayList<RoomInformation>();
    devices=new ArrayList<DeviceInformation>();
    int roomCount=bytes[2];
    int byteOffset=3;
    for (int i=0; i < roomCount; i++) {
      int position=bytes[byteOffset++];
      int nameLength=(int)bytes[byteOffset++] & 0xff;
      byte[] data=new byte[nameLength];
      System.arraycopy(bytes,byteOffset,data,0,nameLength);
      byteOffset+=nameLength;
      String name=new String(data,"String_Node_Str");
      String rfAddress=Utils.toHex(((int)bytes[byteOffset] & 0xff),((int)bytes[byteOffset + 1] & 0xff),((int)bytes[byteOffset + 2] & 0xff));
      byteOffset+=3;
      rooms.add(new RoomInformation(position,name,rfAddress));
    }
    int deviceCount=bytes[byteOffset++];
    for (int deviceId=0; deviceId < deviceCount; deviceId++) {
      DeviceType deviceType=DeviceType.create(bytes[byteOffset++]);
      String rfAddress=Utils.toHex(((int)bytes[byteOffset] & 0xff),((int)bytes[byteOffset + 1] & 0xff),((int)bytes[byteOffset + 2] & 0xff));
      byteOffset+=3;
      String serialNumber="String_Node_Str";
      for (int i=0; i < 10; i++) {
        serialNumber+=(char)bytes[byteOffset++];
      }
      int nameLength=(int)bytes[byteOffset++] & 0xff;
      byte[] data=new byte[nameLength];
      System.arraycopy(bytes,byteOffset,data,0,nameLength);
      byteOffset+=nameLength;
      String deviceName=new String(data,"String_Node_Str");
      int roomId=(int)bytes[byteOffset++] & 0xff;
      devices.add(new DeviceInformation(deviceType,serialNumber,rfAddress,deviceName,roomId));
    }
  }
 catch (  Exception e) {
    logger.info("String_Node_Str");
    logger.info(e.getMessage());
    logger.debug(Utils.getStackTrace(e));
    logger.debug("String_Node_Str",this.getPayload());
  }
 else {
    logger.info("String_Node_Str");
    hasConfiguration=false;
  }
}