THRIFT-5131: Require >= 1.1.4 of integer-encoding dependency

Client: Rust
Patch: Nik Clayton

This closes #2045

Versions 1.1.0 - 1.1.3 of the integer-encoding crate had a bug where
numbers larger than 0x4000_0000_0000_0000 would cause a panic during
decoding.

Add a test to be sure that numbers up to i64::maxvalue() encode and
decode successfully.
This commit is contained in:
Nik Clayton 2020-03-05 11:51:15 +01:00 committed by Jens Geyer
parent 1b7b00cde9
commit e791760098
2 changed files with 26 additions and 1 deletions

View File

@ -13,6 +13,6 @@ keywords = ["thrift"]
[dependencies]
ordered-float = "1.0"
byteorder = "1.3"
integer-encoding = "1.0"
integer-encoding = ">=1.1.4" # https://issues.apache.org/jira/browse/THRIFT-5131
log = "0.4"
threadpool = "1.7"

View File

@ -714,6 +714,31 @@ mod tests {
assert_eq_written_bytes!(o_prot, expected);
}
#[test]
fn must_round_trip_upto_i64_maxvalue() {
// See https://issues.apache.org/jira/browse/THRIFT-5131
for i in 0..64 {
let (mut i_prot, mut o_prot) = test_objects();
let val: i64 = ((1u64 << i) - 1) as i64;
o_prot
.write_field_begin(&TFieldIdentifier::new(
"val",
TType::I64,
1
))
.unwrap();
o_prot.write_i64(val).unwrap();
o_prot.write_field_end().unwrap();
o_prot.flush().unwrap();
copy_write_buffer_to_read_buffer!(o_prot);
i_prot.read_field_begin().unwrap();
assert_eq!(val, i_prot.read_i64().unwrap());
}
}
#[test]
fn must_round_trip_message_begin() {
let (mut i_prot, mut o_prot) = test_objects();