lib/thrift_client/simple.rb in thrift_client-0.4.2 vs lib/thrift_client/simple.rb in thrift_client-0.4.3
- old
+ new
@@ -98,11 +98,12 @@
when STRING
len = s.read(4).unpack("N").first
s.read(len)
when I64
hi, lo = s.read(8).unpack("NN")
- (hi << 32) | lo
+ rv = (hi << 32) | lo
+ (rv >= (1 << 63)) ? (rv - (1 << 64)) : rv
when LIST
read_list(s)
when MAP
read_map(s)
when STRUCT
@@ -112,10 +113,18 @@
when MapType
read_map(s, type.key_type, type.value_type)
when StructType
read_struct(s, type.struct_class)
else
- s.read(SIZES[type]).unpack(FORMATS[type]).first
+ rv = s.read(SIZES[type]).unpack(FORMATS[type]).first
+ case type
+ when I16
+ (rv >= (1 << 15)) ? (rv - (1 << 16)) : rv
+ when I32
+ (rv >= (1 << 31)) ? (rv - (1 << 32)) : rv
+ else
+ rv
+ end
end
end
def read_list(s, element_type=nil)
etype, len = s.read(5).unpack("cN")