Program: 12917
Project: 12917
Buggy source:
public static void sendLoginInfo(Channel channel,Account account){
  LOGGER.debug("String_Node_Str");
  for (  Character character : account.getCharacterCollection()) {
    P007_CharacterInfo characterInfo=new P007_CharacterInfo();
    characterInfo.init(channel);
    characterInfo.setLoginCount(ClientBean.get(channel).getLoginCount());
    characterInfo.setUnknown1(new byte[16]);
    characterInfo.setUnknown2(0);
    characterInfo.setCharacterName(character.getName());
    ByteBuffer buffer=ByteBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN);
    buffer.putShort((short)6);
    buffer.putShort((short)character.getLastOutpost().getGameID());
    buffer.put(new byte[]{0x33,0x36,0x31,0x30});
    buffer.put((byte)((character.getSkin().byteValue() << 5) | (character.getHeight().byteValue() << 1) | character.getSex().byteValue()));
    buffer.put((byte)((character.getFace().byteValue() << 7) | (character.getHaircolor().byteValue() << 2) | (character.getSkin().byteValue() >> 3)));
    buffer.put((byte)((character.getPrimaryProfession().getId().byteValue() << 4) | (character.getFace().byteValue() >> 1)));
    buffer.put((byte)((character.getCampaign().byteValue() << 6) | character.getHairstyle().byteValue()));
    buffer.put(new byte[16]);
    byte level=character.getLevel().getLevel().byteValue();
    buffer.put((byte)((level << 4) | character.getCampaign()));
    buffer.put(new byte[]{-1,-0x23,-0x23,0,-0x23,-0x23,-0x23,-0x23});
    byte[] a=new byte[buffer.position()];
    buffer.position(0);
    buffer.get(a);
    characterInfo.setCharacterInfo(a);
    channel.write(characterInfo);
  }
  sendAccountGuiInfo(channel);
}

Fixed version (ground truth):
public static void sendLoginInfo(Channel channel,Account account){
  LOGGER.debug("String_Node_Str");
  for (  Character character : account.getCharacterCollection()) {
    P007_CharacterInfo characterInfo=new P007_CharacterInfo();
    characterInfo.init(channel);
    characterInfo.setLoginCount(ClientBean.get(channel).getLoginCount());
    characterInfo.setUnknown1(new byte[16]);
    characterInfo.setUnknown2(0);
    characterInfo.setCharacterName(character.getName());
    ByteBuffer buffer=ByteBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN);
    buffer.putShort((short)6);
    buffer.putShort((short)character.getLastOutpost().getGameID());
    buffer.put(new byte[]{0x33,0x36,0x31,0x30});
    buffer.put((byte)((character.getSkin().byteValue() << 5) | (character.getHeight().byteValue() << 1) | character.getSex().byteValue()));
    buffer.put((byte)((character.getFace().byteValue() << 7) | (character.getHaircolor().byteValue() << 2) | (character.getSkin().byteValue() >> 3)));
    buffer.put((byte)((character.getPrimaryProfession().getId().byteValue() << 4) | (character.getFace().byteValue() >> 1)));
    buffer.put((byte)((character.getCampaign().byteValue() << 6) | character.getHairstyle().byteValue()));
    buffer.put(new byte[16]);
    byte level=0;
    buffer.put((byte)((level << 4) | character.getCampaign()));
    buffer.put(new byte[]{-1,-0x23,-0x23,0,-0x23,-0x23,-0x23,-0x23});
    byte[] a=new byte[buffer.position()];
    buffer.position(0);
    buffer.get(a);
    characterInfo.setCharacterInfo(a);
    channel.writeAndFlush(characterInfo);
  }
  sendAccountGuiInfo(channel);
}