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.
This commit is contained in:
Jason Travis Smith 2016-01-02 23:16:39 -05:00
parent 7617ddb16a
commit e6f1fbb229
4 changed files with 48 additions and 9 deletions

35
Cargo.lock generated
View File

@ -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"

View File

@ -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
{

View File

@ -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)

View File

@ -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);