mirror of
https://github.com/tokio-rs/bytes.git
synced 2026-08-23 00:00:13 +02:00
Fix index-oob panic in Take::bytes (#138)
The panic happens when `inner.bytes()` returns a slice smaller than the limit.
This commit is contained in:
+2
-1
@@ -143,7 +143,8 @@ impl<T: Buf> Buf for Take<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn bytes(&self) -> &[u8] {
|
fn bytes(&self) -> &[u8] {
|
||||||
&self.inner.bytes()[..self.limit]
|
let bytes = self.inner.bytes();
|
||||||
|
&bytes[..cmp::min(bytes.len(), self.limit)]
|
||||||
}
|
}
|
||||||
|
|
||||||
fn advance(&mut self, cnt: usize) {
|
fn advance(&mut self, cnt: usize) {
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
extern crate bytes;
|
||||||
|
|
||||||
|
use bytes::Buf;
|
||||||
|
use std::io::Cursor;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn long_take() {
|
||||||
|
// Tests that take with a size greater than the buffer length will not
|
||||||
|
// overrun the buffer. Regression test for #138.
|
||||||
|
let buf = Cursor::new(b"hello world").take(100);
|
||||||
|
assert_eq!(11, buf.remaining());
|
||||||
|
assert_eq!(b"hello world", buf.bytes());
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user