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

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)