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:
|
||||
if - (1 << 5) <= value and value <= (1 << 7) - 1:
|
||||
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_8(value)
|
||||
elif 0 <= value and value <= (1 << 8) - 1:
|
||||
buffer.put_u8(types["uint_8"])
|
||||
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_16(value)
|
||||
elif 0 <= value and value <= (1 << 16) - 1:
|
||||
buffer.put_u8(types["uint_16"])
|
||||
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_32(value)
|
||||
elif 0 <= value and value <= (1 << 32) - 1:
|
||||
buffer.put_u8(types["uint_32"])
|
||||
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_64(value)
|
||||
else:
|
||||
@@ -225,11 +225,9 @@ static func _decode_message(buffer: StreamPeerBuffer, err: Dictionary):
|
||||
return buffer.get_utf8_string(size)
|
||||
|
||||
elif first_byte == types["nil"]: # nil
|
||||
print("null size:%s"%buffer_size)
|
||||
return null
|
||||
|
||||
|
||||
elif first_byte == types["false"]: # false
|
||||
print("false size:%s"%buffer_size)
|
||||
return false
|
||||
|
||||
elif first_byte == types["true"]: # true
|
||||
|
||||
Reference in New Issue
Block a user