From e6f1fbb229fa3e25dfc789529d84741098487772 Mon Sep 17 00:00:00 2001 From: Jason Travis Smith Date: Sat, 2 Jan 2016 23:16:39 -0500 Subject: [PATCH] Fixed the uint and int system types to not require num_bytes. This also fixes the tests for buffer overflow to now work for all primitive types. --- Cargo.lock | 35 +++++++++++++++++++++++++++++++++++ src/endian.rs | 10 ++++++---- src/transmutable.rs | 4 ++-- tests/lib.rs | 8 +++++--- 4 files changed, 48 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bd7e84f..cd4cbf0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,11 +2,46 @@ name = "alchemy" version = "0.1.0" dependencies = [ + "rand 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", "sigils 0.1.0 (git+https://gitlab.com/CyberMages/sigils.git)", ] +[[package]] +name = "advapi32-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rand" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "advapi32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "sigils" version = "0.1.0" source = "git+https://gitlab.com/CyberMages/sigils.git#a618fb27f7ceaaa3f75b334dd8ec716ff795273a" +[[package]] +name = "winapi" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + diff --git a/src/endian.rs b/src/endian.rs index a35eb6c..dcc49ff 100644 --- a/src/endian.rs +++ b/src/endian.rs @@ -36,7 +36,7 @@ macro_rules! read_bytes ({ use std::$returnType; - assert!($returnType::BYTES <= $buffer.len()); + assert!($buffer.len() < $returnType::BYTES); unsafe { (*($buffer.as_ptr() as *const $returnType)).$convertFunc() @@ -52,7 +52,7 @@ macro_rules! write_bytes ({ use std::$valueType; - assert!($buffer.len() < $value_type::BYTES); + assert!($buffer.len() < $valueType::BYTES); unsafe { let size: usize; @@ -93,7 +93,7 @@ impl Transmutable for BigEndian let mut out: [u8; 8]; let ptr_out: *mut u8; - assert!(1 <= buffer.len() && buffer.len() <= 8); + assert!(buffer.len() >= 1 && buffer.len() <= 8); out = [0u8; 8]; ptr_out = out.as_mut_ptr(); @@ -131,6 +131,7 @@ impl Transmutable for BigEndian num_bytes = buffer.len() as u8; assert!(determine_size(num as u64) <= num_bytes && num_bytes <= 8); + assert!(buffer.len() >= 1 && buffer.len() <= 8); unsafe { @@ -164,7 +165,7 @@ impl Transmutable for LittleEndian let mut out: [u8; 8]; let ptr_out: *mut u8; - assert!(1 <= buffer.len() && buffer.len() <= 8); + assert!(buffer.len() >= 1 && buffer.len() <= 8); out = [0u8; 8]; ptr_out = out.as_mut_ptr(); @@ -199,6 +200,7 @@ impl Transmutable for LittleEndian num_bytes = buffer.len() as u8; assert!(determine_size(num as u64) <= num_bytes && num_bytes <= 8); + assert!(buffer.len() >= 1 && buffer.len() <= 8); unsafe { diff --git a/src/transmutable.rs b/src/transmutable.rs index b21c0fd..d1be697 100644 --- a/src/transmutable.rs +++ b/src/transmutable.rs @@ -49,7 +49,7 @@ pub trait Transmutable { let temp_num: u64; - assert!(buffer.len() > 1 && buffer.len() < 8); + assert!(buffer.len() >= 1 && buffer.len() <= 8); temp_num = Self::bytes_to_usize(buffer) as u64; add_sign(temp_num, buffer.len() as u8) as isize @@ -129,7 +129,7 @@ pub trait Transmutable { let temp_num: usize; - assert!(buffer.len() > 1 && buffer.len() < 8); + assert!(buffer.len() >= 1 && buffer.len() <= 8); temp_num = remove_sign(num as i64, buffer.len() as u8) as usize; Self::usize_to_bytes(buffer, temp_num) diff --git a/tests/lib.rs b/tests/lib.rs index ae69ef7..2304237 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -62,7 +62,7 @@ macro_rules! overflow_impl let mut buffer: [u8; $numBytes]; buffer = [0u8; $numBytes]; - LittleEndian::$write_func(&mut buffer, $T::zero()); + LittleEndian::$write_func(&mut buffer, $T::zero()); } }; } @@ -96,12 +96,14 @@ macro_rules! test_buffer_overflow test_buffer_overflow!(overflow_u16, u16, bytes_to_u16, u16_to_bytes); test_buffer_overflow!(overflow_u32, u32, bytes_to_u32, u32_to_bytes); test_buffer_overflow!(overflow_u64, u64, bytes_to_u64, u64_to_bytes); -//test_buffer_overflow!(overflow_usize, usize, bytes_to_usize, usize_to_bytes); +test_buffer_overflow!(overflow_usize, usize, + bytes_to_usize, usize_to_bytes, 9); test_buffer_overflow!(overflow_i16, i16, bytes_to_i16, i16_to_bytes); test_buffer_overflow!(overflow_i32, i32, bytes_to_i32, i32_to_bytes); test_buffer_overflow!(overflow_i64, i64, bytes_to_i64, i64_to_bytes); -//test_buffer_overflow!(overflow_isize, isize, bytes_to_isize, isize_to_bytes); +test_buffer_overflow!(overflow_isize, isize, + bytes_to_isize, isize_to_bytes, 9); test_buffer_overflow!(overflow_f32, f32, bytes_to_f32, f32_to_bytes, 4); test_buffer_overflow!(overflow_f64, f64, bytes_to_f64, f64_to_bytes, 8);