diff --git a/http-body-util/src/util.rs b/http-body-util/src/util.rs index e40de9c..50fa175 100644 --- a/http-body-util/src/util.rs +++ b/http-body-util/src/util.rs @@ -82,9 +82,15 @@ impl Buf for BufList { } Some(front) if front.remaining() > len => front.copy_to_bytes(len), _ => { - assert!(len <= self.remaining(), "`len` greater than remaining"); + let rem = self.remaining(); + assert!(len <= rem, "`len` greater than remaining"); let mut bm = BytesMut::with_capacity(len); - bm.put(self.take(len)); + if rem == len { + // .take() costs a lot more, so skip it if we don't need it + bm.put(self); + } else { + bm.put(self.take(len)); + } bm.freeze() } }