Read a length-prefixed message from a stream.
(r: &mut R)
| 76 | |
| 77 | /// Read a length-prefixed message from a stream. |
| 78 | pub async fn read_msg<R: AsyncReadExt + Unpin>(r: &mut R) -> anyhow::Result<Vec<u8>> { |
| 79 | let mut len_buf = [0u8; 4]; |
| 80 | r.read_exact(&mut len_buf).await?; |
| 81 | let len = |
| 82 | usize::try_from(u32::from_be_bytes(len_buf)).context("Message length overflows usize")?; |
| 83 | if len > 64 * 1024 * 1024 { |
| 84 | anyhow::bail!("Message too large: {len} bytes"); |
| 85 | } |
| 86 | let mut buf = vec![0u8; len]; |
| 87 | r.read_exact(&mut buf).await?; |
| 88 | Ok(buf) |
| 89 | } |
no outgoing calls
no test coverage detected