Skip to content

Commit 9e3be86

Browse files
committed
Patch #36 by @JayWhite2357
1 parent 4057d0f commit 9e3be86

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

src/varint.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,11 @@ impl VarInt for u64 {
139139
result |= (msb_dropped as u64) << shift;
140140
shift += 7;
141141

142-
if b & MSB == 0 || shift > (9 * 7) {
143-
success = b & MSB == 0;
142+
if shift > (9 * 7) {
143+
success = *b < 2;
144+
break;
145+
} else if b & MSB == 0 {
146+
success = true;
144147
break;
145148
}
146149
}

src/varint_tests.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ mod tests {
5050
);
5151
}
5252

53+
#[test]
54+
fn test_decode_max_u64_plus_one() {
55+
let max_vec_encoded = vec![0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x02];
56+
assert!(u64::decode_var(max_vec_encoded.as_slice()).is_none());
57+
}
58+
5359
#[test]
5460
fn test_encode_i64() {
5561
assert_eq!((0 as i64).encode_var_vec(), (0 as u32).encode_var_vec());
@@ -214,9 +220,17 @@ mod tests {
214220
fn test_decode_var_too_big() {
215221
assert_eq!(u8::decode_var(&0x1FF_u64.encode_var_vec()), None, "u8");
216222
assert_eq!(u16::decode_var(&0x1FFFF_u64.encode_var_vec()), None, "u16");
217-
assert_eq!(u32::decode_var(&0x1FFFFFFFF_u64.encode_var_vec()), None, "u32");
223+
assert_eq!(
224+
u32::decode_var(&0x1FFFFFFFF_u64.encode_var_vec()),
225+
None,
226+
"u32"
227+
);
218228
assert_eq!(i8::decode_var(&0x80_i64.encode_var_vec()), None, "i8");
219229
assert_eq!(i16::decode_var(&0x8000_i64.encode_var_vec()), None, "i16");
220-
assert_eq!(i32::decode_var(&0x80000000_i64.encode_var_vec()), None, "i32");
230+
assert_eq!(
231+
i32::decode_var(&0x80000000_i64.encode_var_vec()),
232+
None,
233+
"i32"
234+
);
221235
}
222236
}

0 commit comments

Comments
 (0)