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