diff options
| author | Kornel <kornel@geekhood.net> | 2023-10-09 14:25:31 +0100 |
|---|---|---|
| committer | Kornel <kornel@geekhood.net> | 2024-01-29 23:53:09 +0000 |
| commit | 03545161e68c1b8c3fe052243e372ee75e4ec513 (patch) | |
| tree | 4e3c84a0b5849e3f54230fe6903dd82f68b9739a /library/std/src/io/impls.rs | |
| parent | af08c64e3800fd15f0afdb8651de8fa7dacc0026 (diff) | |
| download | rust-03545161e68c1b8c3fe052243e372ee75e4ec513.tar.gz rust-03545161e68c1b8c3fe052243e372ee75e4ec513.zip | |
Handle out of memory errors in io:Read::read_to_end()
Diffstat (limited to 'library/std/src/io/impls.rs')
| -rw-r--r-- | library/std/src/io/impls.rs | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/library/std/src/io/impls.rs b/library/std/src/io/impls.rs index d8c8d933eb4..557e64dc867 100644 --- a/library/std/src/io/impls.rs +++ b/library/std/src/io/impls.rs @@ -303,8 +303,9 @@ impl Read for &[u8] { #[inline] fn read_to_end(&mut self, buf: &mut Vec<u8>) -> io::Result<usize> { - buf.extend_from_slice(*self); let len = self.len(); + buf.try_reserve(len).map_err(|_| ErrorKind::OutOfMemory)?; + buf.extend_from_slice(*self); *self = &self[len..]; Ok(len) } @@ -451,7 +452,7 @@ impl<A: Allocator> Read for VecDeque<u8, A> { fn read_to_end(&mut self, buf: &mut Vec<u8>) -> io::Result<usize> { // The total len is known upfront so we can reserve it in a single call. let len = self.len(); - buf.reserve(len); + buf.try_reserve(len).map_err(|_| ErrorKind::OutOfMemory)?; let (front, back) = self.as_slices(); buf.extend_from_slice(front); |
