diff --git a/src/buf/buf_mut.rs b/src/buf/buf_mut.rs index de576a52f36aeba5c2c4f4b0ad994b5e6f4c0967..b03103a6193f3e5803a02975a837c90eb4474b02 100644 --- a/src/buf/buf_mut.rs +++ b/src/buf/buf_mut.rs @@ -713,7 +713,7 @@ impl BufMut for Vec<u8> { if cnt > remaining { // Reserve additional capacity, and ensure that the total length // will not overflow usize. - self.reserve(cnt - remaining); + self.reserve(cnt); } self.set_len(len + cnt); diff --git a/tests/test_buf_mut.rs b/tests/test_buf_mut.rs index fe2e9c8b96e8b811b6f160bf2d5fded4dd039355..896e31df0729a93e9625debe49932e111652f855 100644 --- a/tests/test_buf_mut.rs +++ b/tests/test_buf_mut.rs @@ -49,6 +49,17 @@ fn test_put_u16() { assert_eq!(b"\x54\x21", &buf[..]); } +#[test] +fn test_vec_advance_mut() { + // Regression test for carllerche/bytes#108. + let mut buf = Vec::with_capacity(8); + unsafe { + buf.advance_mut(12); + assert_eq!(buf.len(), 12); + assert!(buf.capacity() >= 12, "capacity: {}", buf.capacity()); + } +} + #[test] fn test_clone() { let mut buf = BytesMut::with_capacity(100);