Use explicit sizes for pointers to arrays in FFI

This commit is contained in:
Jack Grigg
2019-12-05 11:09:55 +00:00
parent fb8c73c950
commit 8ad33e50a6

View File

@@ -1228,8 +1228,8 @@ pub extern "system" fn librustzcash_mmr_append(
p_len: size_t, p_len: size_t,
// New node pointer // New node pointer
nn_ptr: *const [u8; zcash_mmr::MAX_NODE_DATA_SIZE], nn_ptr: *const [u8; zcash_mmr::MAX_NODE_DATA_SIZE],
// Return of root commitment (32 byte hash) // Return of root commitment
rt_ret: *mut u8, rt_ret: *mut [u8; 32],
// Return buffer for appended leaves, should be pre-allocated of log2(t_len)+1 length // Return buffer for appended leaves, should be pre-allocated of log2(t_len)+1 length
buf_ret: *mut [c_uchar; zcash_mmr::MAX_NODE_DATA_SIZE], buf_ret: *mut [c_uchar; zcash_mmr::MAX_NODE_DATA_SIZE],
) -> u32 { ) -> u32 {
@@ -1269,7 +1269,7 @@ pub extern "system" fn librustzcash_mmr_append(
.root_node() .root_node()
.expect("Just added, should resolve always; qed"); .expect("Just added, should resolve always; qed");
unsafe { unsafe {
slice::from_raw_parts_mut(rt_ret, 32).copy_from_slice(&root_node.data().subtree_commitment); (*rt_ret).copy_from_slice(&root_node.data().subtree_commitment);
for (idx, next_buf) in slice::from_raw_parts_mut(buf_ret, return_count as usize) for (idx, next_buf) in slice::from_raw_parts_mut(buf_ret, return_count as usize)
.iter_mut() .iter_mut()
@@ -1300,8 +1300,8 @@ pub extern "system" fn librustzcash_mmr_delete(
p_len: size_t, p_len: size_t,
// Extra nodes loaded (for deletion) count // Extra nodes loaded (for deletion) count
e_len: size_t, e_len: size_t,
// Return of root commitment (32 byte hash) // Return of root commitment
rt_ret: *mut u8, rt_ret: *mut [u8; 32],
) -> u32 { ) -> u32 {
let mut tree = match construct_mmr_tree(cbranch, t_len, ni_ptr, n_ptr, p_len, e_len) { let mut tree = match construct_mmr_tree(cbranch, t_len, ni_ptr, n_ptr, p_len, e_len) {
Ok(t) => t, Ok(t) => t,
@@ -1318,7 +1318,7 @@ pub extern "system" fn librustzcash_mmr_delete(
}; };
unsafe { unsafe {
slice::from_raw_parts_mut(rt_ret, 32).copy_from_slice( (*rt_ret).copy_from_slice(
&tree &tree
.root_node() .root_node()
.expect("Just generated without errors, root should be resolving") .expect("Just generated without errors, root should be resolving")
@@ -1334,7 +1334,7 @@ pub extern "system" fn librustzcash_mmr_delete(
pub extern "system" fn librustzcash_mmr_hash_node( pub extern "system" fn librustzcash_mmr_hash_node(
cbranch: u32, cbranch: u32,
n_ptr: *const [u8; zcash_mmr::MAX_NODE_DATA_SIZE], n_ptr: *const [u8; zcash_mmr::MAX_NODE_DATA_SIZE],
h_ret: *mut u8, h_ret: *mut [u8; 32],
) -> u32 { ) -> u32 {
let node_bytes: &[u8; zcash_mmr::MAX_NODE_DATA_SIZE] = unsafe { let node_bytes: &[u8; zcash_mmr::MAX_NODE_DATA_SIZE] = unsafe {
match n_ptr.as_ref() { match n_ptr.as_ref() {
@@ -1349,7 +1349,7 @@ pub extern "system" fn librustzcash_mmr_hash_node(
}; };
unsafe { unsafe {
slice::from_raw_parts_mut(h_ret, 32).copy_from_slice(&node.hash()[..]); (*h_ret).copy_from_slice(&node.hash()[..]);
} }
return 0; return 0;