Gin
Gin copied to clipboard
MessagePack serialization is broken for negative integers
Hi 👋 , There are seem to be some unhandled cases in the MessagePack serializer:
-
fromDatadoes not handle cases0xd0,0xd1,0xd2, and0xd3:
...
else if (d == 0xd0)
{
return int(is.readByte());
}
else if (d == 0xd1)
{
return int(is.readShortBigEndian());
}
else if (d == 0xd2)
{
return is.readIntBigEndian();
}
else if (d == 0xd3)
{
return is.readInt64BigEndian();
}
...
-
toDatacode reads
...
else if (v >= 32768)
{
os.writeByte (char (0xd1));
os.writeShortBigEndian (short (v));
}
else if (v >= 2147483648)
{
os.writeByte (char (0xd2));
os.writeIntBigEndian (int (v));
}
...
has to be
...
else if (v >= -32768)
{
os.writeByte (char (0xd1));
os.writeShortBigEndian (short (v));
}
else if (v >= -2147483648LL)
{
os.writeByte (char (0xd2));
os.writeIntBigEndian (int (v));
}
...
- Also on line 167:
else
{
os.writeByte (char (0xdc));
os.writeIntBigEndian (n);
}
must be
else
{
os.writeByte (char (0xdd));
os.writeIntBigEndian (n);
}
Thanks!