rcvbuf recv may range end out of bounds
Borber opened this issue · comments
新添加 (x: offset, data: Bytes)
当 offset 与已有 segments[n].offset 相等 且
segements[m].offset + segements[m].length < offset + data.len() < segements[m+1].offset 时 出现
#[test]
fn test_rcvbuf_recv_overlap_seg() {
let mut buf = RecvBuf::default();
buf.recv(0, Bytes::from("he"));
buf.recv(6, Bytes::from("world"));
buf.recv(0, Bytes::from("hello"));
let mut buf = RecvBuf::default();
buf.recv(0, Bytes::from("he"));
buf.recv(6, Bytes::from("wo"));
buf.recv(12, Bytes::from("00"));
buf.recv(0, Bytes::from("hello world"));
}
---- recv::rcvbuf::tests::test_rcvbuf_recv_overlap_seg stdout ----
thread 'recv::rcvbuf::tests::test_rcvbuf_recv_overlap_seg' panicked at /Users/x/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bytes-1.6.0/src/bytes.rs:285:9:
range end out of bounds: 6 <= 5
stack backtrace:
0: rust_begin_unwind
at /rustc/d7f6ebacee13b6c03623c4b74197280454ede8de/library/std/src/panicking.rs:658:5
1: core::panicking::panic_fmt
at /rustc/d7f6ebacee13b6c03623c4b74197280454ede8de/library/core/src/panicking.rs:74:14
2: bytes::bytes::Bytes::slice
at /Users/x/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bytes-1.6.0/src/bytes.rs:285:9
3: qrecovery::recv::rcvbuf::RecvBuf::overlap_seg
at ./src/recv/rcvbuf.rs:196:43
4: qrecovery::recv::rcvbuf::RecvBuf::recv
at ./src/recv/rcvbuf.rs:86:17
5: qrecovery::recv::rcvbuf::tests::test_rcvbuf_recv_overlap_seg
at ./src/recv/rcvbuf.rs:311:9
6: qrecovery::recv::rcvbuf::tests::test_rcvbuf_recv_overlap_seg::{{closure}}
at ./src/recv/rcvbuf.rs:307:38
7: core::ops::function::FnOnce::call_once
at /rustc/d7f6ebacee13b6c03623c4b74197280454ede8de/library/core/src/ops/function.rs:250:5
8: core::ops::function::FnOnce::call_once
at /rustc/d7f6ebacee13b6c03623c4b74197280454ede8de/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
failures:
recv::rcvbuf::tests::test_rcvbuf_recv_overlap_seg