Error when LimitedRead gets too few bytes. (#106)
This commit is contained in:
committed by
GitHub
parent
6e69f6cf69
commit
f16f1a5e47
@@ -631,6 +631,15 @@ impl<R: Read> Read for LimitedRead<R> {
|
|||||||
buf
|
buf
|
||||||
};
|
};
|
||||||
match self.reader.read(from) {
|
match self.reader.read(from) {
|
||||||
|
// https://tools.ietf.org/html/rfc7230#page-33
|
||||||
|
// If the sender closes the connection or
|
||||||
|
// the recipient times out before the indicated number of octets are
|
||||||
|
// received, the recipient MUST consider the message to be
|
||||||
|
// incomplete and close the connection.
|
||||||
|
Ok(0) => Err(IoError::new(
|
||||||
|
ErrorKind::InvalidData,
|
||||||
|
"response body closed before all bytes were read",
|
||||||
|
)),
|
||||||
Ok(amount) => {
|
Ok(amount) => {
|
||||||
self.position += amount;
|
self.position += amount;
|
||||||
Ok(amount)
|
Ok(amount)
|
||||||
@@ -640,6 +649,15 @@ impl<R: Read> Read for LimitedRead<R> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn short_read() {
|
||||||
|
use std::io::Cursor;
|
||||||
|
let mut lr = LimitedRead::new(Cursor::new(vec![b'a'; 3]), 10);
|
||||||
|
let mut buf = vec![0; 1000];
|
||||||
|
let result = lr.read_to_end(&mut buf);
|
||||||
|
assert!(result.is_err());
|
||||||
|
}
|
||||||
|
|
||||||
impl<R: Read> From<LimitedRead<R>> for Stream
|
impl<R: Read> From<LimitedRead<R>> for Stream
|
||||||
where
|
where
|
||||||
Stream: From<R>,
|
Stream: From<R>,
|
||||||
|
|||||||
Reference in New Issue
Block a user