Fix bug in fread
Bug discovered by @xTibor. Test and input data provided by him.
This commit is contained in:
@@ -71,20 +71,21 @@ pub struct FILE {
|
||||
}
|
||||
|
||||
impl Read for FILE {
|
||||
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
||||
if !buf.is_empty() {
|
||||
fn read(&mut self, out: &mut [u8]) -> io::Result<usize> {
|
||||
if !out.is_empty() {
|
||||
if let Some(c) = self.unget.take() {
|
||||
buf[0] = c;
|
||||
out[0] = c;
|
||||
return Ok(1);
|
||||
}
|
||||
}
|
||||
|
||||
if self.read_pos == self.read_size {
|
||||
self.fill_buf()?;
|
||||
}
|
||||
let len = {
|
||||
let buf = self.fill_buf()?;
|
||||
let len = buf.len().min(out.len());
|
||||
|
||||
let len = buf.len().min(self.read_size);
|
||||
buf[..len].copy_from_slice(&mut self.read_buf[..len]);
|
||||
out[..len].copy_from_slice(&buf[..len]);
|
||||
len
|
||||
};
|
||||
self.consume(len);
|
||||
Ok(len)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user