Mojira Archive
MC-70873

Write variant long in PacketDataSerializer doesn't work properly

I dug into the minecraft source and found out that in the class PacketDataSerializer (Obfuscated class name: hd) the method writeVarLong (Obfuscated method name: public void b(long paramLong)) is using the same bitmask as the write variant int method (bitmask: 0xFFFFFF80) (Obfuscated method name: public void b(int paramInt)) but because a long has 64 bit in java this bitmask has to be (0xFFFFFFFFFFFFFF80l)

current source in 1.8
  public void b(long paramLong)
  {
    for ( ; ; )
    {
      if ((paramLong & 0xFFFFFF80) == 0L)
      {
        writeByte((int)paramLong);
        return;
      }
      writeByte((int)(paramLong & 0x7F) | 0x80);
      paramLong >>>= 7;
    }
  }
Solution
  public void b(long paramLong)
  {
    for ( ; ; )
    {
      if ((paramLong & 0xFFFFFFFFFFFFFF80l) == 0L)
      {
        writeByte((int)paramLong);
        return;
      }
      writeByte((int)(paramLong & 0x7F) | 0x80);
      paramLong >>>= 7;
    }
  }

Fixed

Manuel

2014-09-04, 05:59 PM

2015-11-10, 11:05 PM

2015-11-10, 11:05 PM

0

3

Unconfirmed

Minecraft 1.8

Minecraft 15w45a