diff --git a/src/imp/buf/mod.rs b/src/imp/buf/mod.rs index 44c20f08f8dea92ce5608aaccd5c55708416dad2..04c4ed2cb6e0647461964ceb798f2a8907a25e91 100644 --- a/src/imp/buf/mod.rs +++ b/src/imp/buf/mod.rs @@ -635,7 +635,14 @@ impl<T: io::Write> WriteExt for T { impl<T: AsRef<[u8]>> Buf for io::Cursor<T> { fn remaining(&self) -> usize { - self.get_ref().as_ref().len() - self.position() as usize + let len = self.get_ref().as_ref().len(); + let pos = self.position(); + + if pos >= len as u64 { + return 0; + } + + len - pos as usize } fn bytes(&self) -> &[u8] { @@ -653,7 +660,7 @@ impl<T: AsRef<[u8]>> Buf for io::Cursor<T> { impl<T: AsMut<[u8]> + AsRef<[u8]>> MutBuf for io::Cursor<T> { fn remaining(&self) -> usize { - self.get_ref().as_ref().len() - self.position() as usize + Buf::remaining(self) } /// Advance the internal cursor of the MutBuf