From 65fe459835e19eab12aed3e4edfe3649f93a720d Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Wed, 30 Aug 2017 16:33:11 -0700 Subject: [PATCH] Make more things result-fail RawTable creation --- src/table.rs | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/table.rs b/src/table.rs index d8537fb742e..9dfde51e39e 100644 --- a/src/table.rs +++ b/src/table.rs @@ -755,19 +755,34 @@ impl RawTable { align_of::(), pairs_size, align_of::<(K, V)>()); - assert!(!oflo, "capacity overflow"); + + if oflo { + // capacity overflow + return Err(()); + } // One check for overflow that covers calculation and rounding of size. let size_of_bucket = size_of::().checked_add(size_of::<(K, V)>()).unwrap(); - assert!(size >= - capacity.checked_mul(size_of_bucket) - .expect("capacity overflow"), - "capacity overflow"); + + let cap_bytes = capacity.checked_mul(size_of_bucket); + + if let Some(cap_bytes) = cap_bytes { + if size < cap_bytes { + // capacity overflow + return Err(()); + } + } else { + // capacity overflow + return Err(()); + } + + // FORK NOTE: Uses alloc shim instead of Heap.alloc let buffer = alloc(size, alignment); if buffer.is_null() { + // OOM return Err(()) }