Tweak BufReader::peek() doctest to expose bug in Buffer::read_more()

This patch makes BufReader::peek()'s doctest call read_more() to refill
the buffer before the inner reader hits EOF. This exposes a bug in
read_more() that causes an out-of-bounds slice access and segfault.
This commit is contained in:
Will Woods 2025-02-28 17:30:53 -08:00
parent 60493b8973
commit b1196717fc

View File

@ -118,16 +118,16 @@ impl<R: Read + ?Sized> BufReader<R> {
/// #![feature(bufreader_peek)] /// #![feature(bufreader_peek)]
/// use std::io::{Read, BufReader}; /// use std::io::{Read, BufReader};
/// ///
/// let mut bytes = &b"oh, hello"[..]; /// let mut bytes = &b"oh, hello there"[..];
/// let mut rdr = BufReader::with_capacity(6, &mut bytes); /// let mut rdr = BufReader::with_capacity(6, &mut bytes);
/// assert_eq!(rdr.peek(2).unwrap(), b"oh"); /// assert_eq!(rdr.peek(2).unwrap(), b"oh");
/// let mut buf = [0; 4]; /// let mut buf = [0; 4];
/// rdr.read(&mut buf[..]).unwrap(); /// rdr.read(&mut buf[..]).unwrap();
/// assert_eq!(&buf, b"oh, "); /// assert_eq!(&buf, b"oh, ");
/// assert_eq!(rdr.peek(2).unwrap(), b"he"); /// assert_eq!(rdr.peek(5).unwrap(), b"hello");
/// let mut s = String::new(); /// let mut s = String::new();
/// rdr.read_to_string(&mut s).unwrap(); /// rdr.read_to_string(&mut s).unwrap();
/// assert_eq!(&s, "hello"); /// assert_eq!(&s, "hello there");
/// assert_eq!(rdr.peek(1).unwrap().len(), 0); /// assert_eq!(rdr.peek(1).unwrap().len(), 0);
/// ``` /// ```
#[unstable(feature = "bufreader_peek", issue = "128405")] #[unstable(feature = "bufreader_peek", issue = "128405")]