mojira.dev
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;
    }
  }

Comments 3

Is this still an issue in the current Minecraft Snapshot 15w45a or later? If so, please update the affected versions in order to best aid Mojang ensuring bugs are still valid in the latest releases/pre-releases.
Edit: Fix version. Thanks.

Psst, @unknown, 15w45b doesn't exist, 15w45a does

Fixed somewhere between 15w45a and 1.8, if it even was an issue in the first place.

Manuel

(Unassigned)

Unconfirmed

Minecraft 1.8

Minecraft 15w45a

Retrieved