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:
Dan Burkert
2017-06-27 11:23:29 -07:00
committed by Carl Lerche
parent aab71ef82c
commit 7ed78cef47
2 changed files with 15 additions and 1 deletions
+2 -1
View File
@@ -143,7 +143,8 @@ impl<T: Buf> Buf for Take<T> {
}
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) {
+13
View File
@@ -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());
}