about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-07-12 09:21:39 +0000
committerbors <bors@rust-lang.org>2014-07-12 09:21:39 +0000
commit767f4a7937c9f8a56cf4d1ac8fd111d481312f34 (patch)
tree83941b2aee60be458863c371618fe19e91ede146 /src/libstd
parenta5688ad22df15f74d5b4ad8231a9cfa6cd92296d (diff)
parent30f07e9067beb931099588bb94b6efcc0d4aa489 (diff)
downloadrust-767f4a7937c9f8a56cf4d1ac8fd111d481312f34.tar.gz
rust-767f4a7937c9f8a56cf4d1ac8fd111d481312f34.zip
auto merge of #15592 : arjantop/rust/bufwriter-write-fix, r=alexcrichton
First condition is not needed and just prevents 0 length writes

Fixes #15583
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/io/mem.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/libstd/io/mem.rs b/src/libstd/io/mem.rs
index 7f9a1180785..1c0251c8369 100644
--- a/src/libstd/io/mem.rs
+++ b/src/libstd/io/mem.rs
@@ -259,8 +259,8 @@ impl<'a> Writer for BufWriter<'a> {
     #[inline]
     fn write(&mut self, buf: &[u8]) -> IoResult<()> {
         // return an error if the entire write does not fit in the buffer
-        let max_size = self.buf.len();
-        if self.pos >= max_size || (self.pos + buf.len()) > max_size {
+        let cap = if self.pos >= self.buf.len() { 0 } else { self.buf.len() - self.pos };
+        if buf.len() > cap {
             return Err(IoError {
                 kind: io::OtherIoError,
                 desc: "Trying to write past end of buffer",
@@ -416,6 +416,8 @@ mod test {
             writer.write([1, 2, 3]).unwrap();
             writer.write([4, 5, 6, 7]).unwrap();
             assert_eq!(writer.tell(), Ok(8));
+            writer.write([]).unwrap();
+            assert_eq!(writer.tell(), Ok(8));
         }
         assert_eq!(buf.as_slice(), &[0, 1, 2, 3, 4, 5, 6, 7]);
     }