genmeta / gm-quic

An IETF quic transport protocol implemented natively using async Rust

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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