Skip to content

Commit cbc69bf

Browse files
authored
Merge commit from fork
1 parent 4141cea commit cbc69bf

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

sync/src/net_time_checker.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ impl NetTimeChecker {
4848
let mid = samples.len() >> 1;
4949
if samples.len() & 0x1 == 0 {
5050
// samples is even
51-
Some((samples[mid - 1] + samples[mid]) >> 1)
51+
Some(((i128::from(samples[mid - 1]) + i128::from(samples[mid])) >> 1) as i64)
5252
} else {
5353
// samples is odd
5454
samples.get(mid).cloned()

sync/src/tests/net_time_checker.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,25 @@ fn test_samples_collect() {
4444
assert_eq!(ntc.check().unwrap_err(), -(TOLERANT_OFFSET as i64) - 1);
4545
}
4646

47+
#[test]
48+
fn test_median_offset_overflows_for_large_even_samples() {
49+
let large_offset = (i64::MAX / 2) + 1;
50+
let mut ntc = NetTimeChecker::new(6, 6, TOLERANT_OFFSET);
51+
52+
for offset in [
53+
1,
54+
2,
55+
large_offset,
56+
large_offset,
57+
large_offset + 1,
58+
large_offset + 2,
59+
] {
60+
ntc.add_sample(offset);
61+
}
62+
63+
assert_eq!(ntc.check().unwrap_err(), large_offset);
64+
}
65+
4766
struct Node {
4867
listen_addr: Multiaddr,
4968
control: ServiceControl,

0 commit comments

Comments
 (0)