Skip to content

Commit 4c5a42b

Browse files
committed
Merge pull request #407 from hyperium/buffer-consume
fix(buffer): get_buf to not return consumed part of buffer
2 parents ce52315 + 04e3b56 commit 4c5a42b

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/buffer.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@ impl<R: Read> BufReader<R> {
2727
pub fn get_mut(&mut self) -> &mut R { &mut self.inner }
2828

2929
pub fn get_buf(&self) -> &[u8] {
30-
self.buf.get_ref()
30+
let pos = self.buf.position() as usize;
31+
if pos < self.buf.get_ref().len() {
32+
&self.buf.get_ref()[pos..]
33+
} else {
34+
&[]
35+
}
3136
}
3237

3338
pub fn into_inner(self) -> R { self.inner }
@@ -93,3 +98,18 @@ fn reserve(v: &mut Vec<u8>) {
9398
v.reserve(cmp::min(cap * 4, MAX_BUFFER_SIZE) - cap);
9499
}
95100
}
101+
102+
#[cfg(test)]
103+
mod tests {
104+
105+
use std::io::BufRead;
106+
use super::BufReader;
107+
108+
#[test]
109+
fn test_consume_and_get_buf() {
110+
let mut rdr = BufReader::new(&b"foo bar baz"[..]);
111+
rdr.read_into_buf().unwrap();
112+
rdr.consume(8);
113+
assert_eq!(rdr.get_buf(), b"baz");
114+
}
115+
}

src/server/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ mod tests {
228228
Host: example.domain\r\n\
229229
Expect: 100-continue\r\n\
230230
Content-Length: 10\r\n\
231-
Connection: close\r\n\
232231
\r\n\
233232
1234567890\
234233
");

0 commit comments

Comments
 (0)