X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=src%2Futils.rs;h=c210a7d3ce2ab7a0801653cbfb40060f9465058b;hb=ca8d67d571b2a1e990405125ed469da56e3d01e9;hp=4b345d0c4cf8cbd8993a5fd4ce778477be5d0662;hpb=29d55c57efac7745daa364d15e18aa4ba00945a6;p=hippotat.git diff --git a/src/utils.rs b/src/utils.rs index 4b345d0..c210a7d 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -40,12 +40,15 @@ impl Result { #[throws(ReadLimitedError)] pub async fn read_limited_bytes(limit: usize, initial: Box<[u8]>, + capacity: usize, stream: &mut S) -> Box<[u8]> where S: futures::Stream> + Debug + Unpin, // we also require that the Stream is cancellation-safe { let mut accum = initial.into_vec(); + let capacity = min(limit, capacity); + if capacity > accum.len() { accum.reserve(capacity - accum.len()); } while let Some(item) = stream.next().await { let b = item?; accum.extend(b);