From 113bff22c66703f413c027a888c4c42af4bcf3ea Mon Sep 17 00:00:00 2001
From: Carl Lerche <me@carllerche.com>
Date: Mon, 9 Mar 2015 22:21:10 -0700
Subject: [PATCH] Fix a couple of bugs

---
 src/alloc.rs |  3 ++-
 src/lib.rs   | 13 ++++++++-----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/alloc.rs b/src/alloc.rs
index ad9452f..9171c38 100644
--- a/src/alloc.rs
+++ b/src/alloc.rs
@@ -1,8 +1,9 @@
 use std::{mem, ptr};
 use std::rt::heap;
 use std::sync::atomic::{AtomicUsize, Ordering};
+use std::usize;
 
-const MAX_ALLOC_SIZE: usize = (1 << 32) - 1;
+const MAX_ALLOC_SIZE: usize = usize::MAX;
 
 /// Allocates memory to be used by Bufs or Bytes. Allows allocating memory
 /// using alternate stratgies than the default Rust heap allocator. Also does
diff --git a/src/lib.rs b/src/lib.rs
index d516a75..8c4874f 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -307,25 +307,28 @@ impl<'a> Sink for &'a mut Vec<u8> {
     fn sink<B: Buf>(self, buf: &mut B) -> Result<usize, BufError> {
         use std::slice;
 
+        self.clear();
+
         let rem = buf.remaining();
         let cap = self.capacity();
-        let len = rem - cap;
 
         // Ensure that the vec is big enough
-        if cap < rem {
-            self.reserve(len);
+        if rem > self.capacity() {
+            self.reserve(rem - cap);
         }
 
         unsafe {
             {
                 let dst = self.as_mut_slice();
-                buf.read_slice(slice::from_raw_parts_mut(dst.as_mut_ptr(), rem));
+                let cnt = buf.read_slice(slice::from_raw_parts_mut(dst.as_mut_ptr(), rem));
+
+                debug_assert!(cnt == rem);
             }
 
             self.set_len(rem);
         }
 
-        Ok(len)
+        Ok(rem)
     }
 }
 
-- 
GitLab