Skip to content

Commit 30b15c7

Browse files
xuxubopeter-jerry-ye
authored andcommitted
fix: correct termination condition for positive integer encoding
1 parent 0b3533a commit 30b15c7

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

buffer/sleb128.mbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub impl Leb128 for Int with output(self, buffer) {
2424
let next_value = value >> 7 // Arithmetic right shift
2525
let sign_bit_set = (byte & 0x40) != 0
2626
let need_more = if value >= 0 {
27-
next_value != 0
27+
next_value != 0 || sign_bit_set
2828
} else {
2929
next_value != -1 || !sign_bit_set
3030
}
@@ -45,7 +45,7 @@ pub impl Leb128 for Int64 with output(self, buffer) {
4545
let next_value = value >> 7 // Arithmetic right shift
4646
let sign_bit_set = (byte & 0x40) != 0
4747
let need_more = if value >= 0 {
48-
next_value != 0
48+
next_value != 0 || sign_bit_set
4949
} else {
5050
next_value != -1 || !sign_bit_set
5151
}

buffer/sleb128_test.mbt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@ test "write_leb128 Int" {
5454
buffer.test_leb128(129)
5555
assert_eq(buffer.to_bytes(), b"\x81\x01")
5656
buffer.test_leb128(16383)
57-
assert_eq(buffer.to_bytes(), b"\xff\x7f")
57+
assert_eq(buffer.to_bytes(), b"\xff\xff\x00")
5858
buffer.test_leb128(16384)
5959
assert_eq(buffer.to_bytes(), b"\x80\x80\x01")
6060
buffer.test_leb128(2097151)
61-
assert_eq(buffer.to_bytes(), b"\xff\xff\x7f")
61+
assert_eq(buffer.to_bytes(), b"\xff\xff\xff\x00")
6262
}
6363

6464
///|
@@ -68,7 +68,7 @@ test "write_leb128 Int64" {
6868
assert_eq(buffer.to_bytes(), b"\x00")
6969
buffer.reset()
7070
buffer.write_leb128(127L)
71-
assert_eq(buffer.to_bytes(), b"\x7f")
71+
assert_eq(buffer.to_bytes(), b"\xff\x00")
7272
buffer.reset()
7373
buffer.write_leb128(128L)
7474
assert_eq(buffer.to_bytes(), b"\x80\x01")
@@ -77,13 +77,13 @@ test "write_leb128 Int64" {
7777
assert_eq(buffer.to_bytes(), b"\x81\x01")
7878
buffer.reset()
7979
buffer.write_leb128(16383L)
80-
assert_eq(buffer.to_bytes(), b"\xff\x7f")
80+
assert_eq(buffer.to_bytes(), b"\xff\xff\x00")
8181
buffer.reset()
8282
buffer.write_leb128(16384L)
8383
assert_eq(buffer.to_bytes(), b"\x80\x80\x01")
8484
buffer.reset()
8585
buffer.write_leb128(2097151L)
86-
assert_eq(buffer.to_bytes(), b"\xff\xff\x7f")
86+
assert_eq(buffer.to_bytes(), b"\xff\xff\xff\x00")
8787
}
8888

8989
///|

0 commit comments

Comments
 (0)