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:
parent
7617ddb16a
commit
e6f1fbb229
35
Cargo.lock
generated
35
Cargo.lock
generated
@ -2,11 +2,46 @@
|
|||||||
name = "alchemy"
|
name = "alchemy"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
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)",
|
"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]]
|
[[package]]
|
||||||
name = "sigils"
|
name = "sigils"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://gitlab.com/CyberMages/sigils.git#a618fb27f7ceaaa3f75b334dd8ec716ff795273a"
|
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"
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ macro_rules! read_bytes
|
|||||||
({
|
({
|
||||||
use std::$returnType;
|
use std::$returnType;
|
||||||
|
|
||||||
assert!($returnType::BYTES <= $buffer.len());
|
assert!($buffer.len() < $returnType::BYTES);
|
||||||
unsafe
|
unsafe
|
||||||
{
|
{
|
||||||
(*($buffer.as_ptr() as *const $returnType)).$convertFunc()
|
(*($buffer.as_ptr() as *const $returnType)).$convertFunc()
|
||||||
@ -52,7 +52,7 @@ macro_rules! write_bytes
|
|||||||
({
|
({
|
||||||
use std::$valueType;
|
use std::$valueType;
|
||||||
|
|
||||||
assert!($buffer.len() < $value_type::BYTES);
|
assert!($buffer.len() < $valueType::BYTES);
|
||||||
unsafe
|
unsafe
|
||||||
{
|
{
|
||||||
let size: usize;
|
let size: usize;
|
||||||
@ -93,7 +93,7 @@ impl Transmutable for BigEndian
|
|||||||
let mut out: [u8; 8];
|
let mut out: [u8; 8];
|
||||||
let ptr_out: *mut u8;
|
let ptr_out: *mut u8;
|
||||||
|
|
||||||
assert!(1 <= buffer.len() && buffer.len() <= 8);
|
assert!(buffer.len() >= 1 && buffer.len() <= 8);
|
||||||
|
|
||||||
out = [0u8; 8];
|
out = [0u8; 8];
|
||||||
ptr_out = out.as_mut_ptr();
|
ptr_out = out.as_mut_ptr();
|
||||||
@ -131,6 +131,7 @@ impl Transmutable for BigEndian
|
|||||||
num_bytes = buffer.len() as u8;
|
num_bytes = buffer.len() as u8;
|
||||||
|
|
||||||
assert!(determine_size(num as u64) <= num_bytes && num_bytes <= 8);
|
assert!(determine_size(num as u64) <= num_bytes && num_bytes <= 8);
|
||||||
|
assert!(buffer.len() >= 1 && buffer.len() <= 8);
|
||||||
|
|
||||||
unsafe
|
unsafe
|
||||||
{
|
{
|
||||||
@ -164,7 +165,7 @@ impl Transmutable for LittleEndian
|
|||||||
let mut out: [u8; 8];
|
let mut out: [u8; 8];
|
||||||
let ptr_out: *mut u8;
|
let ptr_out: *mut u8;
|
||||||
|
|
||||||
assert!(1 <= buffer.len() && buffer.len() <= 8);
|
assert!(buffer.len() >= 1 && buffer.len() <= 8);
|
||||||
|
|
||||||
out = [0u8; 8];
|
out = [0u8; 8];
|
||||||
ptr_out = out.as_mut_ptr();
|
ptr_out = out.as_mut_ptr();
|
||||||
@ -199,6 +200,7 @@ impl Transmutable for LittleEndian
|
|||||||
num_bytes = buffer.len() as u8;
|
num_bytes = buffer.len() as u8;
|
||||||
|
|
||||||
assert!(determine_size(num as u64) <= num_bytes && num_bytes <= 8);
|
assert!(determine_size(num as u64) <= num_bytes && num_bytes <= 8);
|
||||||
|
assert!(buffer.len() >= 1 && buffer.len() <= 8);
|
||||||
|
|
||||||
unsafe
|
unsafe
|
||||||
{
|
{
|
||||||
|
@ -49,7 +49,7 @@ pub trait Transmutable
|
|||||||
{
|
{
|
||||||
let temp_num: u64;
|
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;
|
temp_num = Self::bytes_to_usize(buffer) as u64;
|
||||||
add_sign(temp_num, buffer.len() as u8) as isize
|
add_sign(temp_num, buffer.len() as u8) as isize
|
||||||
@ -129,7 +129,7 @@ pub trait Transmutable
|
|||||||
{
|
{
|
||||||
let temp_num: usize;
|
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;
|
temp_num = remove_sign(num as i64, buffer.len() as u8) as usize;
|
||||||
Self::usize_to_bytes(buffer, temp_num)
|
Self::usize_to_bytes(buffer, temp_num)
|
||||||
|
@ -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_u16, u16, bytes_to_u16, u16_to_bytes);
|
||||||
test_buffer_overflow!(overflow_u32, u32, bytes_to_u32, u32_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_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_i16, i16, bytes_to_i16, i16_to_bytes);
|
||||||
test_buffer_overflow!(overflow_i32, i32, bytes_to_i32, i32_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_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_f32, f32, bytes_to_f32, f32_to_bytes, 4);
|
||||||
test_buffer_overflow!(overflow_f64, f64, bytes_to_f64, f64_to_bytes, 8);
|
test_buffer_overflow!(overflow_f64, f64, bytes_to_f64, f64_to_bytes, 8);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user