fix ReadVarSize bug

This commit is contained in:
2023-12-26 22:22:15 +02:00
parent 7d33ca486a
commit d1cbbeac4b
2 changed files with 34 additions and 1 deletions

3
bin.go
View File

@@ -1022,9 +1022,10 @@ func ReadVarSize(src io.ByteReader) (_ int, err error) {
if err != nil { if err != nil {
return return
} }
if b >= 128 { if b >= 128 {
num |= uint64(b&127) << uint(i*7) num |= uint64(b&127) << uint(i*7)
return return int(num), nil
} }
num |= uint64(b) << uint(i*7) num |= uint64(b) << uint(i*7)
} }

View File

@@ -669,3 +669,35 @@ func TestInt32(t *testing.T) {
fmt.Println(num) fmt.Println(num)
} }
func TestVarSize(t *testing.T) {
var (
buf = bytes.NewBuffer(nil)
nums = []int{
127, // 7
16383, // 14
2097151, // 21
268435455, // 28
34359738367, // 35
4398046511103, // 42
562949953421311, // 49
72057594037927935, // 56
9223372036854775807, // 63
}
)
for _, num := range nums {
WriteVarSize(buf, num)
decoded, err := ReadVarSize(buf)
if err != nil {
t.Fatal(err)
}
if decoded != num {
t.Fatalf("num %d decoded as %d\n", num, decoded)
}
buf.Reset()
}
}