fix(client): correct messagepack signed int boundary encoding
Off-by-one in all four signed int branches: upper bound used <= instead of < (e.g., value <= 128 matched int8 instead of falling through to uint8). Tick 128 was encoded as int8 -128, causing server deserialization failure. Also remove stray debug prints from nil/false decode paths. Fixes bug #4 (MessagePack encodes tick 128 as -128). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -69,25 +69,25 @@ static func _encode_message(buffer: StreamPeerBuffer, value):
|
|||||||
TYPE_INT:
|
TYPE_INT:
|
||||||
if - (1 << 5) <= value and value <= (1 << 7) - 1:
|
if - (1 << 5) <= value and value <= (1 << 7) - 1:
|
||||||
buffer.put_8(value)
|
buffer.put_8(value)
|
||||||
elif - (1 << 7) <= value and value <= (1 << 7):
|
elif - (1 << 7) <= value and value < (1 << 7):
|
||||||
buffer.put_u8(types["int_8"])
|
buffer.put_u8(types["int_8"])
|
||||||
buffer.put_8(value)
|
buffer.put_8(value)
|
||||||
elif 0 <= value and value <= (1 << 8) - 1:
|
elif 0 <= value and value <= (1 << 8) - 1:
|
||||||
buffer.put_u8(types["uint_8"])
|
buffer.put_u8(types["uint_8"])
|
||||||
buffer.put_u8(value)
|
buffer.put_u8(value)
|
||||||
elif - (1 << 15) <= value and value <= (1 << 15):
|
elif - (1 << 15) <= value and value < (1 << 15):
|
||||||
buffer.put_u8(types["int_16"])
|
buffer.put_u8(types["int_16"])
|
||||||
buffer.put_16(value)
|
buffer.put_16(value)
|
||||||
elif 0 <= value and value <= (1 << 16) - 1:
|
elif 0 <= value and value <= (1 << 16) - 1:
|
||||||
buffer.put_u8(types["uint_16"])
|
buffer.put_u8(types["uint_16"])
|
||||||
buffer.put_u16(value)
|
buffer.put_u16(value)
|
||||||
elif - (1 << 31) <= value and value <= (1 << 31):
|
elif - (1 << 31) <= value and value < (1 << 31):
|
||||||
buffer.put_u8(types["int_32"])
|
buffer.put_u8(types["int_32"])
|
||||||
buffer.put_32(value)
|
buffer.put_32(value)
|
||||||
elif 0 <= value and value <= (1 << 32) - 1:
|
elif 0 <= value and value <= (1 << 32) - 1:
|
||||||
buffer.put_u8(types["uint_32"])
|
buffer.put_u8(types["uint_32"])
|
||||||
buffer.put_u32(value)
|
buffer.put_u32(value)
|
||||||
elif - (1 << 63) <= value and value <= (1 << 63):
|
elif - (1 << 63) <= value and value < (1 << 63):
|
||||||
buffer.put_u8(types["int_64"])
|
buffer.put_u8(types["int_64"])
|
||||||
buffer.put_64(value)
|
buffer.put_64(value)
|
||||||
else:
|
else:
|
||||||
@@ -225,11 +225,9 @@ static func _decode_message(buffer: StreamPeerBuffer, err: Dictionary):
|
|||||||
return buffer.get_utf8_string(size)
|
return buffer.get_utf8_string(size)
|
||||||
|
|
||||||
elif first_byte == types["nil"]: # nil
|
elif first_byte == types["nil"]: # nil
|
||||||
print("null size:%s"%buffer_size)
|
|
||||||
return null
|
return null
|
||||||
|
|
||||||
elif first_byte == types["false"]: # false
|
elif first_byte == types["false"]: # false
|
||||||
print("false size:%s"%buffer_size)
|
|
||||||
return false
|
return false
|
||||||
|
|
||||||
elif first_byte == types["true"]: # true
|
elif first_byte == types["true"]: # true
|
||||||
|
|||||||
Reference in New Issue
Block a user