Skip to content

Commit e9c539a

Browse files
committed
Fix infinite loop in MemReader::read_until.
1 parent a2290db commit e9c539a

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/libstd/io/mem.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,11 @@ impl Seek for MemReader {
177177

178178
impl Buffer for MemReader {
179179
fn fill<'a>(&'a mut self) -> IoResult<&'a [u8]> {
180-
Ok(self.buf.slice_from(self.pos))
180+
if self.pos < self.buf.len() {
181+
Ok(self.buf.slice_from(self.pos))
182+
} else {
183+
Err(io::standard_error(io::EndOfFile))
184+
}
181185
}
182186
fn consume(&mut self, amt: uint) { self.pos += amt; }
183187
}
@@ -421,6 +425,10 @@ mod test {
421425
assert_eq!(reader.read(buf), Ok(3));
422426
assert_eq!(buf.slice(0, 3), [5, 6, 7]);
423427
assert!(reader.read(buf).is_err());
428+
let mut reader = MemReader::new(~[0, 1, 2, 3, 4, 5, 6, 7]);
429+
assert_eq!(reader.read_until(3).unwrap(), ~[0, 1, 2, 3]);
430+
assert_eq!(reader.read_until(3).unwrap(), ~[4, 5, 6, 7]);
431+
assert!(reader.read(buf).is_err());
424432
}
425433

426434
#[test]

0 commit comments

Comments
 (0)